seaquester
驱动大牛
驱动大牛
  • 注册日期2002-05-22
  • 最后登录2016-06-16
  • 粉丝0
  • 关注0
  • 积分500分
  • 威望115点
  • 贡献值0点
  • 好评度107点
  • 原创分0分
  • 专家分52分
阅读:3824回复:1

WDK中的辅助内核模式库(Auxiliary Kernel-Mode Library)

楼主#
更多 发布于:2007-06-06 10:03
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 函数)。
八风舞遥翩,九野弄清音。 鸣高常向月,善舞不迎人。
a3xx00443
驱动牛犊
驱动牛犊
  • 注册日期2004-09-12
  • 最后登录2010-03-16
  • 粉丝0
  • 关注0
  • 积分255分
  • 威望56点
  • 贡献值0点
  • 好评度25点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-08-10 09:58
Discover WDK version.
游客

返回顶部