2,641
社区成员
发帖
与我相关
我的任务
分享
.子程序 通信, 逻辑型, 公开, 操作驱动程序
.参数 驱动控制码, 整数型, , 与驱动程序通信的控制码,十进制
.参数 输入指针, 整数型, 可空, 欲输入数据的指针,可留空
.参数 输入指针长度, 整数型, 可空, 默为0,不指定长度
.参数 输出指针, 整数型, 可空, 欲输出数据的指针,可留空
.参数 输出指针长度, 整数型, 可空, 默为0,不指定长度
//初始化
UNICODE_STRING UNI_STR,UNI_STR_2;
RtlInitUnicodeString(&UNI_STR,T("\\Registry\\Machine\\System\\CurrentControlSet\\Services\\ialdnwxf"));
//加载驱动程序
if(!NtLoadDriver(&UNI_STR))
{
MessageBoxA(0,"加载成功!","Err",0);
}
else
{
show_err();
}
//获取驱动句柄HANDLE
OBJECT_ATTRIBUTES OA = {0};
RtlInitUnicodeString(&UNI_STR_2,T("\\\\.\\ialdnwxf"));
InitializeObjectAttributes(&OA,&UNI_STR_2,0x00000200/*OBJ_KERNEL_HANDLE*/,NULL,NULL);
HANDLE hDriver = NULL;
IO_STATUS_BLOCK ISB = {0};
if(!NtCreateFile(&hDriver,GENERIC_READ|GENERIC_WRITE,&OA,&ISB,NULL,FILE_ATTRIBUTE_NORMAL,FILE_SHARE_READ|FILE_SHARE_WRITE,0x00000003/*FILE_OPEN_IF*/,NULL,NULL,NULL))
{
MessageBoxA(0,"获取驱动句柄成功!","Err",0);
}
else
{
show_err();//此处显示错误 C000003B STATUS_OBJECT_PATH_SYNTAX_BAD
}
//与驱动通信
ULONG InputBuffer=0,OutputBuffer=0;
if (!NtDeviceIoControlFile(hDriver,NULL,NULL,&ISB,&ISB,0x00222005/*IoControlCode is 2236421*/,&InputBuffer,sizeof(InputBuffer),/*&OutputBuffer*/0,/*sizeof(OutputBuffer)*/0))
{
MessageBoxA(0,"操作成功!","Err",0);
}
else
{
show_err();//此处显示错误C0000008 STATUS_INVALID_HANDLE
}
if(!NtUnloadDriver(&UNI_STR))
{
MessageBoxA(0,"卸载驱动成功!","Err",0);
}
else
{
show_err();
}
RtlFreeUnicodeString(&UNI_STR);
NtClose(hDriver);