阅读:3916回复:1
WDK中的辅助内核模式库(Auxiliary Kernel-Mode Library)
Seaquester
2007-6-6 WDK中增加了一个辅助内核模式库(Auxiliary Kernel-Mode Library),里面的函数可以让内核模式驱动程序访问某些系统功能。里面包含的函数有下面几个: AuxKlibInitialize AuxKlibQueryModuleInformation AuxKlibGetImageExportDirectory AuxKlibGetBugCheckData 1. AuxKlibInitialize 函数用来初始化 Auxiliary Kernel-Mode Library。Driver 在使用 Auxiliary Kernel-Mode Library 里面的其他函数之前必须先调用 AuxKlibInitialize。函数原型如下: NTSTATUS AuxKlibInitialize ( VOID ); 另外,要使用里面的函数必须包含头文件 aux_klib.h,并链接 aux_klib.lib。 2. AuxKlibQueryModuleInformation 是一个文档化的获得加载模块的方法,可以替代 ZwQuerySystemInformation 的部分功能。函数原型如下: NTSTATUS AuxKlibQueryModuleInformation ( IN OUT PULONG BufferSize, IN ULONG ElementSize, OUT PVOID QueryInfo OPTIONAL ); 下面的示例代码摘录自MSDN: NTSTATUS status; ULONG modulesSize; AUX_MODULE_EXTENDED_INFO* modules; ULONG numberOfModules; // // Get the required array size. // status = AuxKlibQueryModuleInformation( &modulesSize, sizeof(AUX_MODULE_EXTENDED_INFO), NULL ); if (!NT_SUCCESS(status) || modulesSize == 0) { break; } // // Calculate the number of modules. // numberOfModules = modulesSize / sizeof(AUX_MODULE_EXTENDED_INFO); // // Allocate memory to receive data. // modules = (AUX_MODULE_EXTENDED_INFO*) ExAllocatePoolWithTag( PagedPool, modulesSize, '3LxF' ); if (modules == NULL) { status = STATUS_INSUFFICIENT_RESOURCES; break; } RtlZeroMemory(modules, modulesSize); // // Obtain the module information. // status = AuxKlibQueryModuleInformation( &modulesSize, sizeof(AUX_MODULE_EXTENDED_INFO), modules ); if (!NT_SUCCESS(status)) { break; } 3. AuxKlibGetImageExportDirectory 函数可以得到一个模块的导出目录。函数原型如下: PIMAGE_EXPORT_DIRECTORY AuxKlibGetImageExportDirectory( IN PVOID ImageBase ); 4. AuxKlibGetBugCheckData 函数可以获得一个刚发生的 Bug Check 的信息。函数原型如下: NTSTATUS AuxKlibGetBugCheckData( OUT PKBUGCHECK_DATA BugCheckData ); 注:AuxKlibGetBugCheckData 只能在 BugCheckCallback 例程里面调用(如何注册 BugCheckCallback 例程请参考KeRegisterBugCheckCallback 函数)。 |
|
|
沙发#
发布于:2007-08-10 09:58
Discover WDK version.
|
|