137 lines
2.6 KiB
C
137 lines
2.6 KiB
C
/*++
|
|
|
|
Copyright (c) 2000 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
obperf.c
|
|
|
|
Abstract:
|
|
|
|
This module contains ob support routines for performance hooks.
|
|
|
|
Author:
|
|
|
|
Stephen Hsiao (shsiao) 11-May-2000
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
#include "obp.h"
|
|
|
|
BOOLEAN
|
|
ObPerfDumpHandleEntry (
|
|
IN PHANDLE_TABLE_ENTRY ObjectTableEntry,
|
|
IN HANDLE HandleId,
|
|
IN PVOID EnumParameter
|
|
);
|
|
|
|
#ifdef ALLOC_PRAGMA
|
|
#pragma alloc_text(PAGEWMI, ObPerfDumpHandleEntry)
|
|
#pragma alloc_text(PAGEWMI, ObPerfHandleTableWalk)
|
|
#endif
|
|
|
|
BOOLEAN
|
|
ObPerfDumpHandleEntry (
|
|
IN PHANDLE_TABLE_ENTRY ObjectTableEntry,
|
|
IN HANDLE HandleId,
|
|
IN PVOID EnumParameter
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
This routine checks a HandleTableEntry and see if it a file
|
|
|
|
Arguments:
|
|
|
|
ObjectTableEntry - Points to the handle table entry of interest.
|
|
|
|
HandleId - Supplies the handle.
|
|
|
|
EnumParameter - The HashTable to be used
|
|
|
|
Return Value:
|
|
|
|
FALSE, which tells ExEnumHandleTable to continue iterating through the
|
|
handle table.
|
|
|
|
--*/
|
|
{
|
|
extern POBJECT_TYPE ObpDirectoryObjectType;
|
|
extern POBJECT_TYPE IoFileObjectType;
|
|
POBJECT_HEADER ObjectHeader;
|
|
PVOID Object;
|
|
PPERFINFO_ENTRY_TABLE HashTable = EnumParameter;
|
|
|
|
ObjectHeader = (POBJECT_HEADER)(((ULONG_PTR)(ObjectTableEntry->Object)) & ~OBJ_HANDLE_ATTRIBUTES);
|
|
Object = &ObjectHeader->Body;
|
|
|
|
if (ObjectHeader->Type == IoFileObjectType) {
|
|
//
|
|
// File Object
|
|
//
|
|
PFILE_OBJECT FileObject = (PFILE_OBJECT) Object;
|
|
PerfInfoAddToFileHash(HashTable, FileObject);
|
|
|
|
#if 0
|
|
} else if (ObjectHeader->Type == ObpDirectoryObjectType) {
|
|
} else if (ObjectHeader->Type == MmSectionObjectType) {
|
|
#endif
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
VOID
|
|
ObPerfHandleTableWalk (
|
|
PEPROCESS Process,
|
|
PPERFINFO_ENTRY_TABLE HashTable
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
This routine adds files in the handle table to the hash table.
|
|
|
|
Arguments:
|
|
|
|
Process - Process to walk through.
|
|
If NULL, walk through the ObpKernelHandleTable;
|
|
|
|
HashTable - HashTable in which to add the file
|
|
|
|
Return Value:
|
|
|
|
None.
|
|
|
|
--*/
|
|
{
|
|
PHANDLE_TABLE ObjectTable;
|
|
|
|
if (Process) {
|
|
ObjectTable = ObReferenceProcessHandleTable (Process);
|
|
if ( !ObjectTable ) {
|
|
return ;
|
|
}
|
|
} else {
|
|
//
|
|
//
|
|
//
|
|
ObjectTable = ObpKernelHandleTable;
|
|
}
|
|
|
|
ExEnumHandleTable( ObjectTable,
|
|
ObPerfDumpHandleEntry,
|
|
(PVOID) HashTable,
|
|
(PHANDLE)NULL );
|
|
|
|
if (Process) {
|
|
ObDereferenceProcessHandleTable( Process );
|
|
}
|
|
}
|
|
|
|
|