Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(625)

Unified Diff: content/browser/handle_enumerator_win.h

Issue 7054080: Add a flag to print the handles held by a child process when it shuts down. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/browser/child_process_launcher.cc ('k') | content/browser/handle_enumerator_win.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/handle_enumerator_win.h
===================================================================
--- content/browser/handle_enumerator_win.h (revision 0)
+++ content/browser/handle_enumerator_win.h (revision 0)
@@ -0,0 +1,163 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef BASE_HANDLE_ENUMERATION_WIN_H_
+#define BASE_HANDLE_ENUMERATION_WIN_H_
+
+#include <windows.h>
+
+#include "base/base_api.h"
+#include "base/basictypes.h"
+#include "base/process.h"
+#include "base/utf_string_conversions.h"
+#include "build/build_config.h"
+#include "content/browser/renderer_host/render_process_host.h"
+#include "content/common/child_process_info.h"
+
cpu_(ooo_6.6-7.5) 2011/06/07 21:18:00 we should use either src/sandbox/tools/finder/ntun
Cris Neckar 2011/06/07 22:10:10 Done.
+const wchar_t kNtdllDllName[] = L"ntdll.dll";
+const size_t kMaxHandleNameLength = 1024;
+
+#define STATUS_INFO_LENGTH_MISMATCH 0xc0000004
+
+#define SystemHandleInformation 16
+#define ObjectNameInformation 1
+#define ObjectTypeInformation 2
+
+typedef LONG (WINAPI* NtQuerySystemInformationFunction)(
+ ULONG SystemInformationClass,
+ PVOID SystemInformation,
+ ULONG SystemInformationLength,
+ PULONG ReturnLength);
+
+typedef LONG (WINAPI* NtDuplicateObjectFunction)(
+ HANDLE SourceProcessHandle,
+ HANDLE SourceHandle,
+ HANDLE TargetProcessHandle,
+ PHANDLE TargetHandle,
+ ACCESS_MASK DesiredAccess,
+ ULONG Attributes,
+ ULONG Options);
+
+typedef LONG (WINAPI* NtQueryObjectFunction)(
+ HANDLE ObjectHandle,
+ ULONG ObjectInformationClass,
+ PVOID ObjectInformation,
+ ULONG ObjectInformationLength,
+ PULONG ReturnLength);
+
+typedef struct _SYSTEM_HANDLE {
+ ULONG ProcessId;
+ BYTE ObjectTypeNumber;
+ BYTE Flags;
+ USHORT Handle;
+ PVOID Object;
+ ACCESS_MASK GrantedAccess;
+} SYSTEM_HANDLE;
+
+typedef struct _SYSTEM_HANDLE_INFORMATION {
+ ULONG HandleCount;
+ SYSTEM_HANDLE Handles[1];
+} SYSTEM_HANDLE_INFORMATION;
+
+typedef enum _POOL_TYPE {
+ NonPagedPool,
+ PagedPool,
+ NonPagedPoolMustSucceed,
+ ReservedType,
+ NonPagedPoolCacheAligned,
+ PagedPoolCacheAligned,
+ NonPagedPoolCacheAlignedMustS
+} POOL_TYPE;
+
+typedef struct _UNICODE_STRING {
+ USHORT Length;
+ USHORT MaximumLength;
+ PWSTR Buffer;
+} UNICODE_STRING;
+
+typedef struct _OBJECT_TYPE_INFORMATION {
+ UNICODE_STRING Name;
+ ULONG TotalNumberOfObjects;
+ ULONG TotalNumberOfHandles;
+ ULONG TotalPagedPoolUsage;
+ ULONG TotalNonPagedPoolUsage;
+ ULONG TotalNamePoolUsage;
+ ULONG TotalHandleTableUsage;
+ ULONG HighWaterNumberOfObjects;
+ ULONG HighWaterNumberOfHandles;
+ ULONG HighWaterPagedPoolUsage;
+ ULONG HighWaterNonPagedPoolUsage;
+ ULONG HighWaterNamePoolUsage;
+ ULONG HighWaterHandleTableUsage;
+ ULONG InvalidAttributes;
+ GENERIC_MAPPING GenericMapping;
+ ULONG ValidAccess;
+ BOOLEAN SecurityRequired;
+ BOOLEAN MaintainHandleCount;
+ USHORT MaintainTypeList;
+ POOL_TYPE PoolType;
+ ULONG PagedPoolUsage;
+ ULONG NonPagedPoolUsage;
+} OBJECT_TYPE_INFORMATION;
+
+typedef enum _HANDLE_TYPE {
+ ProcessHandle,
+ ThreadHandle,
+ FileHandle,
+ DirectoryHandle,
+ KeyHandle,
+ WindowStationHandle,
+ DesktopHandle,
+ ServiceHandle,
+ EventHandle,
+ MutexHandle,
+ SemaphoreHandle,
+ TimerHandle,
+ NamedPipeHandle,
+ JobHandle,
+ FileMapHandle,
+ OtherHandle
+} HandleType;
+
+class HandleEnumerator : public base::RefCountedThreadSafe<HandleEnumerator> {
+ public:
+ enum HandleEnumStatus {
+ Starting,
+ InProgress,
+ Finished
+ };
+
+ HandleEnumerator(base::ProcessHandle handle):
+ handle_(handle),
+ type_(ChildProcessInfo::UNKNOWN_PROCESS),
+ status_(Starting) { }
+
+ ChildProcessInfo::ProcessType type() { return type_; }
+
+ HandleEnumStatus status() { return status_; }
+
+ void RunHandleEnumeration();
+
+ void EnumerateHandles();
+
+ static HandleType StringToHandleType(string16 type);
+
+ static string16 ProcessTypeString(ChildProcessInfo::ProcessType process_type);
+
+ static string16 GetAccessString(HandleType handle_type,
+ ACCESS_MASK access);
+
+ private:
+ void FindProcessOnIOThread();
+
+ void FindProcessOnUIThread();
+
+ void EnumerateHandlesAndTerminateProcess();
+
+ base::ProcessHandle handle_;
+ ChildProcessInfo::ProcessType type_;
+ HandleEnumStatus status_;
+};
+
+#endif // BASE_HANDLE_ENUMERATION_WIN_H_
« no previous file with comments | « content/browser/child_process_launcher.cc ('k') | content/browser/handle_enumerator_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698