能力值:
( LV7,RANK:100 )
|
-
-
2 楼
能编译就可以直接调用
蓝屏是因为你UNICODE_STRING的buffer成员没初始化,要先ExAllocatePoolWithTag一下
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
UNICODE_STRING ustrNtName = {0};
WCHAR szNtNameBuf[260] = {0};
WCHAR szDosName[MAX_PATH] = L"C:\\test\\hello.exe";
RtlInitEmptyUnicodeString(&ustrNtName,szNtNameBuf,260 * sizeof(WCHAR));
//ustrNtName = (UNICODE_STRING)ExAllocatePoolWithTag(PagedPool,MAX_PATH,'DTON');
if (RtlDosPathNameToNtPathName_U(szDosName,&ustrNtName,NULL,NULL))
{
KdPrint(("%s: [%s] RtlDosPathNameToNtPathName_U Success \n",__MYNAME__,__FUNCTION__));
}
else
{
KdPrint(("%s: [%s] RtlDosPathNameToNtPathName_U Failed \n",__MYNAME__,__FUNCTION__));
}
照样蓝屏
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
这个函数是ring3下的函数,内核中无这个函数
你定义个函数类型,声明个函数指针,当然编译可以通过,但是这个函数是个空指针,一调用自然蓝屏了.
自己写个函数就可以了,就是在前面加\??\嘛
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
其实我想加的是\\Device\\HarddiskVolumeXXX
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
为什么一定想用这个函数
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
其实可以用 KeUserModeCallback 调用R3下的函数,具体怎么用搜索下都有,很简单的.
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
那用哪个?
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
首先:RtlInitEmptyUnicodeString初始化的UNICODE_STRING, 成员length为0.
#define RtlInitEmptyUnicodeString(_ucStr,_buf,_bufSize) \
((_ucStr)->Buffer = (_buf), \
(_ucStr)->Length = 0, \
(_ucStr)->MaximumLength = (USHORT)(_bufSize))
用下面的方法可以将:\??\C:得到你想要的\Device\HarddiskVolumeXXX
ZwOpenSymbolicLinkObject
ZwQuerySymbolicLinkObject
ZwClose
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
个人认为能不能调用,需要调试下看看,存放地址的变量的值对不对。
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
这两个 原因和解决方案都出来了
|
|
|