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

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

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 函数)。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值