阅读:1126回复:0
ZwCreateFile的返回值
我在测试《寒江独钓》中的DP例子的时候,总是报错error create temp file!
对这个例子做了一点小改动: 1.tempfile的路径该在C盘下。 2.目标盘改为R盘。 使用windbg调试,发现DPReinitializationRoutine函数中,使用ZwCreateFile创建文件时,返回值是0x-1073741819。但是不知道这代表什么意思。 本人才疏学浅,实在没办法找到解释,求高人指点。 VOID DPReinitializationRoutine( IN PDRIVER_OBJECT DriverObject, IN PVOID Context, IN ULONG Count ) { //返回值 NTSTATUS ntStatus; //D盘的缓冲文件名 WCHAR SparseFilename[] = L"\\??\\C:\\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); //这里观察返回值是0x-1073741819 if(!NT_SUCCESS(ntStatus)) { } |
|