cicada
驱动小牛
驱动小牛
  • 注册日期2003-12-09
  • 最后登录2008-07-11
  • 粉丝1
  • 关注0
  • 积分74分
  • 威望15点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
阅读:1371回复:1

ZwReadFile老是黑屏?

楼主#
更多 发布于:2005-04-04 22:43
cTempName 中是“\\??\\c:\\abc\\abc.exe”这样的文件名
           RtlInitAnsiString( &fileNameAnsiString, cTempName);
RtlAnsiStringToUnicodeString( &fileNameUnicodeString, &fileNameAnsiString, TRUE );
InitializeObjectAttributes( &objectAttributes,
&fileNameUnicodeString, OBJ_CASE_INSENSITIVE, NULL, NULL );

ntStatus = ZwCreateFile(
&hFileHandle,
FILE_READ_DATA,
&objectAttributes,
&Io_StatusBlock,
NULL,
FILE_ATTRIBUTE_NORMAL,
FILE_SHARE_READ,
FILE_OPEN,
FILE_NON_DIRECTORY_FILE,
NULL,
0 );
if( !NT_SUCCESS( ntStatus ) )
{
RtlFreeUnicodeString(&fileNameUnicodeString);
return FALSE;
}
ntStatus = ZwQueryInformationFile(
hFileHandle,
&Io_StatusBlock,
&File_Infomation,
sizeof(FILE_STANDARD_INFORMATION),
FileStandardInformation );
if( !NT_SUCCESS( ntStatus ) )
{
ZwClose (hFileHandle);
RtlFreeUnicodeString(&fileNameUnicodeString);
return FALSE;
}
llFileSize = File_Infomation.EndOfFile.QuadPart;
pBaseAddress = ExAllocatePool(NonPagedPool, (ULONG)llFileSize);
if (!pBaseAddress)
{
ZwClose (hFileHandle);
RtlFreeUnicodeString(&fileNameUnicodeString);
return FALSE;
}
liByteOffSet.QuadPart =0;
ntStatus = ZwReadFile( hFileHandle,
NULL,
NULL,
NULL,
&Io_StatusBlock,
pBaseAddress,
(ULONG)llFileSize,
&liByteOffSet,
NULL );
if( !NT_SUCCESS( ntStatus ) )
{
ExFreePool(pBaseAddress);
ZwClose (hFileHandle);
RtlFreeUnicodeString(&fileNameUnicodeString);
return FALSE;
}

ExFreePool(pBaseAddress);
ZwClose (hFileHandle);
RtlFreeUnicodeString(&fileNameUnicodeString);
ZwCreateFile和ZwQueryInformationFile都执行正确,ZwReadFile执行时肯定会黑屏,但是黑屏的时机不定。如何解决呢?
jl2004
驱动小牛
驱动小牛
  • 注册日期2007-04-10
  • 最后登录2011-02-22
  • 粉丝0
  • 关注0
  • 积分21分
  • 威望276点
  • 贡献值0点
  • 好评度129点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-12-04 16:03
我也碰到这问题,呵呵
向前,向前,向前....
游客

返回顶部