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

FTKernelAPI 是一套完全免费(对于非商业性程序而言)的实现了BitTorrent 网络协议的内核。在兼容官方BitTorrent协议的同时针对国内的网络带宽状况进行了优化,增加了一个侦听端口支持多个任务同时运行, 文件选择下载,断点续传, 自动配置支持UPnP协议的路由器, 对于全局或者单个任务进行速度限制等功能。FTKernelAPI BT协议内核以及示例源码 BitZam 的出现,使BT软件开发不再高深。只要你愿意,不必关心网络编程,BT协议,只需简单的调用FTKernelAPI的接口在3天的时间里就能开发出满足你自己需要的BT下载软件。假如你正在想自己开发一个BT下载软件或者你正在为你的公司的程序寻找一种省钱省时的下载解决方案, FTKernelAPI将是你的理想选择...FTKernelAPI 成熟可靠吗? 可以被那些开发语言使用?BT下载软件FlashBT(变态快车) 就是使用的本内核. 从2004年开发至今,经过了大约100万以上用户的测试使用,已经非常成熟和可靠。而且作者长期从事P2P和IM软件的开发,积累了丰富的开发经验,还在不断的改进和完善FTKernelAPI 之。FTKernelAPI 是使用C++开发, 以标准C API 接口的方式提供外部调用接口. 所以FTKernelAPI 不但可以应用于C++开发的程序, 同样可以应用于VB/Delphi/C++ Builder 的语言开发的程序. 目前FTKernelAPI 已经被国内和国外的几家公司成功的应用于他们的商业程序, 包括C++和Delhpi开发的程序.FTKernelAPI 如何使用? 有什么例子可以参照吗?为了便于大家使用, 作者提供了一个使用FTKernelAPI 开发的开放源码的BT下载程序 - BitZam. 关于使用FTKernelAPI, 你可以下载BitZam的C++源码看看. 使用起来非常简单. 你可以在BitZam的基础上在很短的时间内开发出通用的BitTorrent下载程序或者自己专用的禁止其他人的BitTorrent软件下载的程序. 你不必再关心BitTorrent协议的细节, 这些都已经被封装在了内核.FTKernelAPI 和FlashBT的使用的内核有差别吗?FlashBT同样使用的是 FTKernelAPI 内核. 你得到的内核和FlashBT使用的没有任何差别. 这意味着, 只要你愿意, 你可以开发出和FlashBT一样强大的BT下载程序.FTKernelAPI 是完全免费的吗? 可以将它应用于商业程序吗?对于非商业性非盈利性软件你可以自由免费使用它. 没有任何时间和功能限制. 对于商业性程序, 你只需要支付少量的费用,就可以获取到本内核的商业使用权, 并且获得到作者的免费长期技术支持。另外对于商业应用的特殊需求,FTKernelAPI提供了特别的接口,就是使用FTKernelAPI可以制作出使用DE算法加密的只有FTKernelAPI能够识别和下载的Torrent件,保护您的商业利益不受侵犯!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值