WCHAR SparseFilename[]
=
L
"\\??\\E:\\temp.dat"
;
UNICODE_STRING SparseFilenameUni;
/
/
建立文件时的io操作状态值
IO_STATUS_BLOCK ios
=
{
0
};
/
/
建立文件时的对象属性变量
OBJECT_ATTRIBUTES ObjAttr
=
{
0
};
/
/
设置文件大小的时候使用的文件结尾描述符
FILE_END_OF_FILE_INFORMATION FileEndInfo
=
{
0
};
/
/
打开我们将要用来做转储的文件
/
/
初始化要打开的文件名
RtlInitUnicodeString(&SparseFilenameUni,SparseFilename);
/
/
初始化文件名对应的对象名,这里需要将其初始化为内核对象,并且大小写不敏感
InitializeObjectAttributes(
&ObjAttr,
&SparseFilenameUni,
OBJ_KERNEL_HANDLE|OBJ_CASE_INSENSITIVE,
NULL,
NULL);
/
/
建立文件,这里需要注意的是,要加入FILE_NO_INTERMEDIATE_BUFFERING选项,避免文件系统再缓存这个文件
ntStatus
=
ZwCreateFile(
&gProtectDevExt
-
>TempFile,
GENERIC_READ | GENERIC_WRITE,
&ObjAttr,
&ios,
NULL,
FILE_ATTRIBUTE_NORMAL,
0
,
FILE_OVERWRITE_IF,
FILE_NON_DIRECTORY_FILE |
FILE_RANDOM_ACCESS |
FILE_SYNCHRONOUS_IO_NONALERT |
FILE_NO_INTERMEDIATE_BUFFERING,
NULL,
0
);