能力值:
( LV12,RANK:210 )
|
-
-
2 楼
ioStatus里面的值是什么?
另外,建议你在初始化对象属性的时候指定OBJ_KERNEL_HANDLE标志。
|
能力值:
( LV4,RANK:50 )
|
-
-
3 楼
i8042prt 这个驱动没加载
把CreateDisposition参数 用FILE_OPEN_IF 试试
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
用FILE_OPEN_IF 也不行
ioStatus 没有付值的
|
能力值:
( LV4,RANK:50 )
|
-
-
5 楼
1.确定i8042prt是否加载了
2.确定i8042prt是否处理了irp_mj_create
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
.确定i8042prt 加载了 用其他工具能看见
用ObReferenceObjectByName 都能获取设备指针
|
能力值:
( LV9,RANK:165 )
|
-
-
7 楼
返回值是 STATUS_OBJECT_TYPE_MISMATCH 楼主再检查一下
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
对 返回是这个 STATUS_OBJECT_TYPE_MISMATCH C0000024
|
能力值:
( LV13,RANK:400 )
|
-
-
9 楼
........
........
........
........
CreateFile是打开设备,不是驱动。
i8042prt是PS/2驱动,没有对应的设备。
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
设备有的 因为用用其他工具能看到的,
用CreateFile 这个函数 而不用ZwCreateFile 是吗?
|
能力值:
( LV13,RANK:400 )
|
-
-
11 楼
CreateFile最终会调用Ntdll!ZwCreateFile
跟你说了,i8042ptr这个驱动没有对应的设备对象,只不过在其设备栈上附加的有键盘或者鼠标驱动。
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
那怎么得到 对象指针呢。
这样不能得到对象指针。
NTSTATUS Getkeyi8042prt()
{
NTSTATUS ntStatus;
UNICODE_STRING fileNameUnicodeString;
OBJECT_ATTRIBUTES objectAttributes;
HANDLE ntFileHandle;
IO_STATUS_BLOCK ioStatus;
PFILE_OBJECT fileObject;
PDEVICE_OBJECT fileSysDevice;
HANDLE hSymbolic;
RtlInitUnicodeString( &fileNameUnicodeString,L"\\??\\C:\\windows\\System32\\Drivers\\i8042prt.sys");
// RtlInitUnicodeString( &fileNameUnicodeString, L"\\Driver\\i8042prt" );
InitializeObjectAttributes(&objectAttributes, &fileNameUnicodeString,
OBJ_CASE_INSENSITIVE|OBJ_KERNEL_HANDLE, NULL, NULL);
ntStatus = ZwCreateFile(
&ntFileHandle,
FILE_READ_ATTRIBUTES|SYNCHRONIZE,
&objectAttributes,
&ioStatus,
NULL,
FILE_ATTRIBUTE_NORMAL,
FILE_SHARE_READ|FILE_SHARE_WRITE,
FILE_OPEN_IF,
FILE_NON_DIRECTORY_FILE| FILE_SYNCHRONOUS_IO_NONALERT,
NULL,0);
if( !NT_SUCCESS( ntStatus )) {
return STATUS_UNSUCCESSFUL;
}
ntStatus = ObReferenceObjectByHandle( ntFileHandle, FILE_READ_DATA,
NULL, KernelMode, &fileObject, NULL );
if( !NT_SUCCESS( ntStatus )) {
ObDereferenceObject( fileObject );
return STATUS_UNSUCCESSFUL;
}
fileSysDevice=IoGetBaseFileSystemDeviceObject( fileObject );
//这里不能得到对象指针
ObDereferenceObject( fileObject );
return ntStatus;
}
应该怎么才能 得到对象指针
|
能力值:
( LV13,RANK:400 )
|
-
-
13 楼
\\Driver\\i8042prt
NTSTATUS ObReferenceObjectByName(
PUNICODE_STRING ObjectName,
ULONG Attributes,
PACCESS_STATE AccessState,
ACCESS_MASK DesiredAccess,
POBJECT_TYPE ObjectType,
KPROCESSOR_MODE AccessMode,
PVOID ParseContext,
PVOID *Object
);
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
ObReferenceObjectByName 这个函数用过 ,有的机器 不行 不知道是什么 原因。
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
http://bbs.pediy.com/showthread.php?p=1079664
这个和遇到的情况一样
|
能力值:
( LV13,RANK:400 )
|
-
-
16 楼
因为这个函数是为公开函数,在早起的nt内核版本中可能还没有这个函数,所以需要考虑兼容性,
如果你对兼容性要求较高的话那就换个办法吧。
先去挂到KbdClass0设备上,然后再在设备栈中搜索驱动对象,理论上应该改能找到下层的i8042prt驱动对象。
|
|
|