handle_enumerator_win.cc revision 5821806d5e7f356e8fa4b058a389a808ea183019
16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// Copyright (c) 2011 The Chromium Authors. All rights reserved. 26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// Use of this source code is governed by a BSD-style license that can be 36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// found in the LICENSE file. 46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "content/common/handle_enumerator_win.h" 66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include <windows.h> 86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include <map> 96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "base/command_line.h" 116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "base/logging.h" 126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "base/process.h" 136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "base/process_util.h" 146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "base/utf_string_conversions.h" 156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "base/win/windows_version.h" 166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "content/public/common/content_switches.h" 176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "content/public/common/result_codes.h" 186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "sandbox/win/src/handle_table.h" 196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgnamespace { 216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgtypedef std::map<const string16, content::HandleType> HandleTypeMap; 236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgHandleTypeMap& MakeHandleTypeMap() { 256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org HandleTypeMap& handle_types = *(new HandleTypeMap()); 266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org handle_types[sandbox::HandleTable::kTypeProcess] = content::ProcessHandle; 276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org handle_types[sandbox::HandleTable::kTypeThread] = content::ThreadHandle; 286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org handle_types[sandbox::HandleTable::kTypeFile] = content::FileHandle; 296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org handle_types[sandbox::HandleTable::kTypeDirectory] = 306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org content::DirectoryHandle; 316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org handle_types[sandbox::HandleTable::kTypeKey] = content::KeyHandle; 326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org handle_types[sandbox::HandleTable::kTypeWindowStation] = 336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org content::WindowStationHandle; 346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org handle_types[sandbox::HandleTable::kTypeDesktop] = content::DesktopHandle; 356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org handle_types[sandbox::HandleTable::kTypeService] = content::ServiceHandle; 366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org handle_types[sandbox::HandleTable::kTypeMutex] = content::MutexHandle; 376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org handle_types[sandbox::HandleTable::kTypeSemaphore] = 386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org content::SemaphoreHandle; 396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org handle_types[sandbox::HandleTable::kTypeEvent] = content::EventHandle; 406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org handle_types[sandbox::HandleTable::kTypeTimer] = content::TimerHandle; 416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org handle_types[sandbox::HandleTable::kTypeNamedPipe] = 426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org content::NamedPipeHandle; 436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org handle_types[sandbox::HandleTable::kTypeJobObject] = content::JobHandle; 446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org handle_types[sandbox::HandleTable::kTypeFileMap] = content::FileMapHandle; 456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org handle_types[sandbox::HandleTable::kTypeAlpcPort] = 466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org content::AlpcPortHandle; 476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return handle_types; 496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} // namespace 526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgnamespace content { 546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgconst size_t kMaxHandleNameLength = 1024; 566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid HandleEnumerator::EnumerateHandles() { 586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org sandbox::HandleTable handles; 596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org std::string process_type = 606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org CommandLine::ForCurrentProcess()->GetSwitchValueASCII( 616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org switches::kProcessType); 626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org string16 output = ASCIIToUTF16(process_type); 636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org output.append(ASCIIToUTF16(" process - Handles at shutdown:\n")); 646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (sandbox::HandleTable::Iterator sys_handle 656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org = handles.HandlesForProcess(::GetCurrentProcessId()); 666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org sys_handle != handles.end(); ++sys_handle) { 676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org HandleType current_type = StringToHandleType(sys_handle->Type()); 686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!all_handles_ && (current_type != ProcessHandle && 696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org current_type != FileHandle && 706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org current_type != DirectoryHandle && 716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org current_type != KeyHandle && 726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org current_type != WindowStationHandle && 736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org current_type != DesktopHandle && 746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org current_type != ServiceHandle)) 756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org continue; 766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org output += ASCIIToUTF16("["); 786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org output += sys_handle->Type(); 796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org output += ASCIIToUTF16("] ("); 806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org output += sys_handle->Name(); 816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org output += ASCIIToUTF16(")\n"); 826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org output += GetAccessString(current_type, 836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org sys_handle->handle_entry()->GrantedAccess); 846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org DLOG(INFO) << output; 866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgHandleType StringToHandleType(const string16& type) { 896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static HandleTypeMap handle_types = MakeHandleTypeMap(); 906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org HandleTypeMap::iterator result = handle_types.find(type); 916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return result != handle_types.end() ? result->second : OtherHandle; 926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstring16 GetAccessString(HandleType handle_type, 956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ACCESS_MASK access) { 966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org string16 output; 976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (access & GENERIC_READ) 986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org output.append(ASCIIToUTF16("\tGENERIC_READ\n")); 996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (access & GENERIC_WRITE) 1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org output.append(ASCIIToUTF16("\tGENERIC_WRITE\n")); 1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (access & GENERIC_EXECUTE) 1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org output.append(ASCIIToUTF16("\tGENERIC_EXECUTE\n")); 1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (access & GENERIC_ALL) 1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org output.append(ASCIIToUTF16("\tGENERIC_ALL\n")); 1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (access & DELETE) 1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org output.append(ASCIIToUTF16("\tDELETE\n")); 1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (access & READ_CONTROL) 1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org output.append(ASCIIToUTF16("\tREAD_CONTROL\n")); 1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (access & WRITE_DAC) 1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org output.append(ASCIIToUTF16("\tWRITE_DAC\n")); 1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (access & WRITE_OWNER) 1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org output.append(ASCIIToUTF16("\tWRITE_OWNER\n")); 1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (access & SYNCHRONIZE) 1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org output.append(ASCIIToUTF16("\tSYNCHRONIZE\n")); 1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org switch (handle_type) { 1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case ProcessHandle: 1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (access & PROCESS_CREATE_PROCESS) 1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org output.append(ASCIIToUTF16("\tPROCESS_CREATE_PROCESS\n")); 1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (access & PROCESS_CREATE_THREAD) 1216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org output.append(ASCIIToUTF16("\tPROCESS_CREATE_THREAD\n")); 1226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (access & PROCESS_DUP_HANDLE) 1236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org output.append(ASCIIToUTF16("\tPROCESS_DUP_HANDLE\n")); 1246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (access & PROCESS_QUERY_INFORMATION) 1256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org output.append(ASCIIToUTF16("\tPROCESS_QUERY_INFORMATION\n")); 1266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (access & PROCESS_QUERY_LIMITED_INFORMATION) 1276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org output.append(ASCIIToUTF16("\tPROCESS_QUERY_LIMITED_INFORMATION\n")); 1286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (access & PROCESS_SET_INFORMATION) 1296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org output.append(ASCIIToUTF16("\tPROCESS_SET_INFORMATION\n")); 1306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (access & PROCESS_SET_QUOTA) 1316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org output.append(ASCIIToUTF16("\tPROCESS_SET_QUOTA\n")); 1326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (access & PROCESS_SUSPEND_RESUME) 1336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org output.append(ASCIIToUTF16("\tPROCESS_SUSPEND_RESUME\n")); 1346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (access & PROCESS_TERMINATE) 1356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org output.append(ASCIIToUTF16("\tPROCESS_TERMINATE\n")); 1366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (access & PROCESS_VM_OPERATION) 1376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org output.append(ASCIIToUTF16("\tPROCESS_VM_OPERATION\n")); 1386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (access & PROCESS_VM_READ) 1396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org output.append(ASCIIToUTF16("\tPROCESS_VM_READ\n")); 1406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (access & PROCESS_VM_WRITE) 1416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org output.append(ASCIIToUTF16("\tPROCESS_VM_WRITE\n")); 1426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 1436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case ThreadHandle: 1446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (access & THREAD_DIRECT_IMPERSONATION) 1456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org output.append(ASCIIToUTF16("\tTHREAD_DIRECT_IMPERSONATION\n")); 146a4ce5bf56788dbb4835a5ef6143384266bbff5f5jshin@chromium.org if (access & THREAD_GET_CONTEXT) 1476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org output.append(ASCIIToUTF16("\tTHREAD_GET_CONTEXT\n")); 1486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (access & THREAD_IMPERSONATE) 1496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org output.append(ASCIIToUTF16("\tTHREAD_IMPERSONATE\n")); 1506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (access & THREAD_QUERY_INFORMATION ) 1516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org output.append(ASCIIToUTF16("\tTHREAD_QUERY_INFORMATION\n")); 1526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (access & THREAD_QUERY_LIMITED_INFORMATION) 1536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org output.append(ASCIIToUTF16("\tTHREAD_QUERY_LIMITED_INFORMATION\n")); 1546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (access & THREAD_SET_CONTEXT) 1556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org output.append(ASCIIToUTF16("\tTHREAD_SET_CONTEXT\n")); 1566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (access & THREAD_SET_INFORMATION) 1576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org output.append(ASCIIToUTF16("\tTHREAD_SET_INFORMATION\n")); 1586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (access & THREAD_SET_LIMITED_INFORMATION) 1596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org output.append(ASCIIToUTF16("\tTHREAD_SET_LIMITED_INFORMATION\n")); 1606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (access & THREAD_SET_THREAD_TOKEN) 1616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org output.append(ASCIIToUTF16("\tTHREAD_SET_THREAD_TOKEN\n")); 1626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (access & THREAD_SUSPEND_RESUME) 163 output.append(ASCIIToUTF16("\tTHREAD_SUSPEND_RESUME\n")); 164 if (access & THREAD_TERMINATE) 165 output.append(ASCIIToUTF16("\tTHREAD_TERMINATE\n")); 166 break; 167 case FileHandle: 168 if (access & FILE_APPEND_DATA) 169 output.append(ASCIIToUTF16("\tFILE_APPEND_DATA\n")); 170 if (access & FILE_EXECUTE) 171 output.append(ASCIIToUTF16("\tFILE_EXECUTE\n")); 172 if (access & FILE_READ_ATTRIBUTES) 173 output.append(ASCIIToUTF16("\tFILE_READ_ATTRIBUTES\n")); 174 if (access & FILE_READ_DATA) 175 output.append(ASCIIToUTF16("\tFILE_READ_DATA\n")); 176 if (access & FILE_READ_EA) 177 output.append(ASCIIToUTF16("\tFILE_READ_EA\n")); 178 if (access & FILE_WRITE_ATTRIBUTES) 179 output.append(ASCIIToUTF16("\tFILE_WRITE_ATTRIBUTES\n")); 180 if (access & FILE_WRITE_DATA) 181 output.append(ASCIIToUTF16("\tFILE_WRITE_DATA\n")); 182 if (access & FILE_WRITE_EA) 183 output.append(ASCIIToUTF16("\tFILE_WRITE_EA\n")); 184 if (access & FILE_WRITE_EA) 185 output.append(ASCIIToUTF16("\tFILE_WRITE_EA\n")); 186 break; 187 case DirectoryHandle: 188 if (access & FILE_ADD_FILE) 189 output.append(ASCIIToUTF16("\tFILE_ADD_FILE\n")); 190 if (access & FILE_ADD_SUBDIRECTORY) 191 output.append(ASCIIToUTF16("\tFILE_ADD_SUBDIRECTORY\n")); 192 if (access & FILE_APPEND_DATA) 193 output.append(ASCIIToUTF16("\tFILE_APPEND_DATA\n")); 194 if (access & FILE_DELETE_CHILD) 195 output.append(ASCIIToUTF16("\tFILE_DELETE_CHILD\n")); 196 if (access & FILE_LIST_DIRECTORY) 197 output.append(ASCIIToUTF16("\tFILE_LIST_DIRECTORY\n")); 198 if (access & FILE_READ_DATA) 199 output.append(ASCIIToUTF16("\tFILE_READ_DATA\n")); 200 if (access & FILE_TRAVERSE) 201 output.append(ASCIIToUTF16("\tFILE_TRAVERSE\n")); 202 if (access & FILE_WRITE_DATA) 203 output.append(ASCIIToUTF16("\tFILE_WRITE_DATA\n")); 204 break; 205 case KeyHandle: 206 if (access & KEY_CREATE_LINK) 207 output.append(ASCIIToUTF16("\tKEY_CREATE_LINK\n")); 208 if (access & KEY_CREATE_SUB_KEY) 209 output.append(ASCIIToUTF16("\tKEY_CREATE_SUB_KEY\n")); 210 if (access & KEY_ENUMERATE_SUB_KEYS) 211 output.append(ASCIIToUTF16("\tKEY_ENUMERATE_SUB_KEYS\n")); 212 if (access & KEY_EXECUTE) 213 output.append(ASCIIToUTF16("\tKEY_EXECUTE\n")); 214 if (access & KEY_NOTIFY) 215 output.append(ASCIIToUTF16("\tKEY_NOTIFY\n")); 216 if (access & KEY_QUERY_VALUE) 217 output.append(ASCIIToUTF16("\tKEY_QUERY_VALUE\n")); 218 if (access & KEY_READ) 219 output.append(ASCIIToUTF16("\tKEY_READ\n")); 220 if (access & KEY_SET_VALUE) 221 output.append(ASCIIToUTF16("\tKEY_SET_VALUE\n")); 222 if (access & KEY_WOW64_32KEY) 223 output.append(ASCIIToUTF16("\tKEY_WOW64_32KEY\n")); 224 if (access & KEY_WOW64_64KEY) 225 output.append(ASCIIToUTF16("\tKEY_WOW64_64KEY\n")); 226 break; 227 case WindowStationHandle: 228 if (access & WINSTA_ACCESSCLIPBOARD) 229 output.append(ASCIIToUTF16("\tWINSTA_ACCESSCLIPBOARD\n")); 230 if (access & WINSTA_ACCESSGLOBALATOMS) 231 output.append(ASCIIToUTF16("\tWINSTA_ACCESSGLOBALATOMS\n")); 232 if (access & WINSTA_CREATEDESKTOP) 233 output.append(ASCIIToUTF16("\tWINSTA_CREATEDESKTOP\n")); 234 if (access & WINSTA_ENUMDESKTOPS) 235 output.append(ASCIIToUTF16("\tWINSTA_ENUMDESKTOPS\n")); 236 if (access & WINSTA_ENUMERATE) 237 output.append(ASCIIToUTF16("\tWINSTA_ENUMERATE\n")); 238 if (access & WINSTA_EXITWINDOWS) 239 output.append(ASCIIToUTF16("\tWINSTA_EXITWINDOWS\n")); 240 if (access & WINSTA_READATTRIBUTES) 241 output.append(ASCIIToUTF16("\tWINSTA_READATTRIBUTES\n")); 242 if (access & WINSTA_READSCREEN) 243 output.append(ASCIIToUTF16("\tWINSTA_READSCREEN\n")); 244 if (access & WINSTA_WRITEATTRIBUTES) 245 output.append(ASCIIToUTF16("\tWINSTA_WRITEATTRIBUTES\n")); 246 break; 247 case DesktopHandle: 248 if (access & DESKTOP_CREATEMENU) 249 output.append(ASCIIToUTF16("\tDESKTOP_CREATEMENU\n")); 250 if (access & DESKTOP_CREATEWINDOW) 251 output.append(ASCIIToUTF16("\tDESKTOP_CREATEWINDOW\n")); 252 if (access & DESKTOP_ENUMERATE) 253 output.append(ASCIIToUTF16("\tDESKTOP_ENUMERATE\n")); 254 if (access & DESKTOP_HOOKCONTROL) 255 output.append(ASCIIToUTF16("\tDESKTOP_HOOKCONTROL\n")); 256 if (access & DESKTOP_JOURNALPLAYBACK) 257 output.append(ASCIIToUTF16("\tDESKTOP_JOURNALPLAYBACK\n")); 258 if (access & DESKTOP_JOURNALRECORD) 259 output.append(ASCIIToUTF16("\tDESKTOP_JOURNALRECORD\n")); 260 if (access & DESKTOP_READOBJECTS) 261 output.append(ASCIIToUTF16("\tDESKTOP_READOBJECTS\n")); 262 if (access & DESKTOP_SWITCHDESKTOP) 263 output.append(ASCIIToUTF16("\tDESKTOP_SWITCHDESKTOP\n")); 264 if (access & DESKTOP_WRITEOBJECTS) 265 output.append(ASCIIToUTF16("\tDESKTOP_WRITEOBJECTS\n")); 266 break; 267 case ServiceHandle: 268 if (access & SC_MANAGER_CREATE_SERVICE) 269 output.append(ASCIIToUTF16("\tSC_MANAGER_CREATE_SERVICE\n")); 270 if (access & SC_MANAGER_CONNECT) 271 output.append(ASCIIToUTF16("\tSC_MANAGER_CONNECT\n")); 272 if (access & SC_MANAGER_ENUMERATE_SERVICE ) 273 output.append(ASCIIToUTF16("\tSC_MANAGER_ENUMERATE_SERVICE\n")); 274 if (access & SC_MANAGER_LOCK) 275 output.append(ASCIIToUTF16("\tSC_MANAGER_LOCK\n")); 276 if (access & SC_MANAGER_MODIFY_BOOT_CONFIG ) 277 output.append(ASCIIToUTF16("\tSC_MANAGER_MODIFY_BOOT_CONFIG\n")); 278 if (access & SC_MANAGER_QUERY_LOCK_STATUS ) 279 output.append(ASCIIToUTF16("\tSC_MANAGER_QUERY_LOCK_STATUS\n")); 280 break; 281 case EventHandle: 282 if (access & EVENT_MODIFY_STATE) 283 output.append(ASCIIToUTF16("\tEVENT_MODIFY_STATE\n")); 284 break; 285 case MutexHandle: 286 if (access & MUTEX_MODIFY_STATE) 287 output.append(ASCIIToUTF16("\tMUTEX_MODIFY_STATE\n")); 288 break; 289 case SemaphoreHandle: 290 if (access & SEMAPHORE_MODIFY_STATE) 291 output.append(ASCIIToUTF16("\tSEMAPHORE_MODIFY_STATE\n")); 292 break; 293 case TimerHandle: 294 if (access & TIMER_MODIFY_STATE) 295 output.append(ASCIIToUTF16("\tTIMER_MODIFY_STATE\n")); 296 if (access & TIMER_QUERY_STATE) 297 output.append(ASCIIToUTF16("\tTIMER_QUERY_STATE\n")); 298 break; 299 case NamedPipeHandle: 300 if (access & PIPE_ACCESS_INBOUND) 301 output.append(ASCIIToUTF16("\tPIPE_ACCESS_INBOUND\n")); 302 if (access & PIPE_ACCESS_OUTBOUND) 303 output.append(ASCIIToUTF16("\tPIPE_ACCESS_OUTBOUND\n")); 304 break; 305 case JobHandle: 306 if (access & JOB_OBJECT_ASSIGN_PROCESS) 307 output.append(ASCIIToUTF16("\tJOB_OBJECT_ASSIGN_PROCESS\n")); 308 if (access & JOB_OBJECT_QUERY) 309 output.append(ASCIIToUTF16("\tJOB_OBJECT_QUERY\n")); 310 if (access & JOB_OBJECT_SET_ATTRIBUTES) 311 output.append(ASCIIToUTF16("\tJOB_OBJECT_SET_ATTRIBUTES\n")); 312 if (access & JOB_OBJECT_SET_SECURITY_ATTRIBUTES) 313 output.append(ASCIIToUTF16("\tJOB_OBJECT_SET_SECURITY_ATTRIBUTES\n")); 314 if (access & JOB_OBJECT_TERMINATE) 315 output.append(ASCIIToUTF16("\tJOB_OBJECT_TERMINATE\n")); 316 break; 317 case FileMapHandle: 318 if (access & FILE_MAP_EXECUTE) 319 output.append(ASCIIToUTF16("\tFILE_MAP_EXECUTE\n")); 320 if (access & FILE_MAP_READ) 321 output.append(ASCIIToUTF16("\tFILE_MAP_READ\n")); 322 if (access & FILE_MAP_WRITE) 323 output.append(ASCIIToUTF16("\tFILE_MAP_WRITE\n")); 324 break; 325 } 326 return output; 327} 328 329} // namespace content 330