Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*++
Copyright (c) 1994 Microsoft Corporation
Module Name:
handle.cxx
Abstract:
Contains function to return number of open handles owned by this process
Contents: InternetHandleCount
Author:
Richard L Firth (rfirth) 02-May-1995
Environment:
Win32 user-mode DLL
Revision History:
02-May-1995 rfirth Created
--*/
#include <wininetp.h>
#include "rprintf.h"
#if INET_DEBUG
//
// private types
//
typedef (*NT_QUERY_SYSTEM_INFORMATION)(ULONG, PVOID, ULONG, PULONG);
//
// functions
//
DWORD InternetHandleCount( VOID )
/*++
Routine Description:
Gets the number of system handles owned by this process. We LoadLibrary() NTDLL.DLL so that the debug version of this DLL still works on Win95
Arguments:
None.
Return Value:
DWORD
--*/
{ static HINSTANCE hNtdll = NULL; static NT_QUERY_SYSTEM_INFORMATION _NtQuerySystemInformation;
if (IsPlatformWin95()) { return 0; }
if (hNtdll == NULL) { hNtdll = LoadLibrary("ntdll"); if (hNtdll == NULL) { return 0; } _NtQuerySystemInformation = (NT_QUERY_SYSTEM_INFORMATION)GetProcAddress(hNtdll, "NtQuerySystemInformation"); if (_NtQuerySystemInformation == 0) { FreeLibrary(hNtdll); hNtdll = NULL; } }
if (_NtQuerySystemInformation) {
DWORD idProcess; NTSTATUS status; ULONG outputLength; BYTE buffer[32768]; PSYSTEM_PROCESS_INFORMATION info;
status = _NtQuerySystemInformation(SystemProcessInformation, (PVOID)buffer, sizeof(buffer), &outputLength ); if (!NT_SUCCESS(status)) { return 0; } info = (PSYSTEM_PROCESS_INFORMATION)buffer; idProcess = GetCurrentProcessId(); while (TRUE) { if ((DWORD_PTR)info->UniqueProcessId == idProcess) { return info->HandleCount; } if (info->NextEntryOffset == 0) { return 0; } info = (PSYSTEM_PROCESS_INFORMATION)((PCHAR)info + info->NextEntryOffset); } } return 0; }
#endif // INET_DEBUG
|