stoneyr
驱动牛犊
驱动牛犊
  • 注册日期2002-01-13
  • 最后登录2007-10-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:3671回复:8

关于ZwWriteFile的问题

楼主#
更多 发布于:2002-08-22 20:58
我在AddDevice里调用ZwWriteFile想写一点东西到一个文件里(只是一个练习),但是失败了,为什么?我从设备管理器里看到错误代码是31,是什么意思?什么地方有相关的资料?

最新喜欢:

cyliucyliu
stoneyr
驱动牛犊
驱动牛犊
  • 注册日期2002-01-13
  • 最后登录2007-10-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-08-22 21:02
顺便把相关的代码贴出来

TCHAR pContent[] = \"AddDevice is called\";
ntStatus = WriteToLogFile(pdx->hLogFileHandle,pContent,strlen(pContent)*sizeof(TCHAR));

NTSTATUS WriteToLogFile(HANDLE hLogFileHandle,TCHAR* pContent,ULONG ulLength)
{
 IO_STATUS_BLOCK ioStatusBlock;
 NTSTATUS ntStatus = ZwWriteFile(hLogFileHandle,NULL,NULL,NULL,&ioStatusBlock,
pContent,ulLength,NULL,NULL);
KdPrint((\"Write %X bytes to file.Status %X\\n\",ioStatusBlock.Information,ntStatus));
return ntStatus;
}
stoneyr
驱动牛犊
驱动牛犊
  • 注册日期2002-01-13
  • 最后登录2007-10-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-08-22 21:04
还有,文件已经顺利打开了的。
denizen
驱动大牛
驱动大牛
  • 注册日期2001-12-30
  • 最后登录2012-05-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-08-22 21:33
用softice跟踪一下, 看看是不是这里出的错.
Where there is a will, there is a road.
stoneyr
驱动牛犊
驱动牛犊
  • 注册日期2002-01-13
  • 最后登录2007-10-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-08-22 22:23
SoftIce我还不太会用
而且在我的机器上,一启动SoftIce就死机,不知道为什么

我敢肯定是这个地方出的错
因为
在我打开的文件里是空白的,什么东西也没有,说明没写进什么东西,文件是正确打开的了,要不然就没有出现文件名在文件夹里。
另外,如果我忽略它返回的ntStatus的话,这个驱动是可以运行的,也就是说在设备管理器里驱动程序上没有那个叹号。而不忽略这个返回值的话就什么出现那个叹号。我想就应该是那个地方的错吧。
tigerzd
驱动老牛
驱动老牛
  • 注册日期2001-08-25
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-08-23 08:36
1、看看ZwCreateFile的参数设置。
2、检查调用ZwWriteFile的IRQL。
犯强汉者,虽远必诛! [img]http://www.driverdevelop.com/forum/upload/tigerzd/2002-12-13_sf10.JPG[/img]
stoneyr
驱动牛犊
驱动牛犊
  • 注册日期2002-01-13
  • 最后登录2007-10-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-08-23 15:50
相关代码:
NTSTATUS AddDevice  (IN PDRIVER_OBJECT pDriverObject,IN PDEVICE_OBJECT  pPdo)
{
PDEVICE_OBJECT pFdo;
NTSTATUS ntStatus = IoCreateDevice(pDriverObject,
sizeof(DEVICE_EXTENSION),NULL,FILE_DEVICE_UNKNOWN,FILE_DEVICE_SECURE_OPEN,FALSE,&pFdo);
if (!NT_SUCCESS(ntStatus))
{
KdPrint((\"IoCreateDevice failed - %X\\n\",ntStatus));
return ntStatus;
}

PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION)pFdo->DeviceExtension;
pdx->pDriverObject = pDriverObject;
pdx->pFdo          = pFdo;
pdx->pPdo          = pPdo;

UNICODE_STRING unName;
RtlInitUnicodeString(&unName,L\"\\\\??\\\\D:\\\\Stone\\\\LogFile.txt\");
OBJECT_ATTRIBUTES ObjectrAttributes;
InitializeObjectAttributes(&ObjectrAttributes,&unName,OBJ_OPENIF,NULL,NULL);

IO_STATUS_BLOCK ioStatusBlock;
ntStatus =
ZwCreateFile(&pdx->hLogFileHandle,FILE_WRITE_DATA | FILE_READ_DATA | FILE_APPEND_DATA,&ObjectrAttributes,
&ioStatusBlock,NULL,FILE_ATTRIBUTE_NORMAL,0,FILE_OPEN_IF,FILE_RANDOM_ACCESS,NULL,0);
if (!NT_SUCCESS(ntStatus))
{
KdPrint((\"ZwCreateFile fialed - %X\\n\",ntStatus));
IoDeleteDevice(pFdo);
return ntStatus;
}

ntStatus = IoRegisterDeviceInterface(pPdo,&GUID_TEST,NULL,&pdx->unLinkName);
if (!NT_SUCCESS(ntStatus))
{
KdPrint((\"IoRegisterDeviceInterface failed - %X\\n\",ntStatus));
ZwClose(pdx->hLogFileHandle);
IoDeleteDevice(pFdo);
return ntStatus;
}

TCHAR pContent[] = \"AddDevice is called\";
ntStatus = WriteToLogFile(pdx->hLogFileHandle,pContent,strlen(pContent)*sizeof(TCHAR));

if (!NT_SUCCESS(ntStatus))
{
KdPrint((\"WritetoLogFile failed - %X\\n\",ntStatus));
ZwClose(pdx->hLogFileHandle);
IoDeleteDevice(pFdo);
return ntStatus;
}

pdx->pLowerDeviceObject = IoAttachDeviceToDeviceStack(pFdo,pPdo);
pFdo->Flags &= ~DO_DEVICE_INITIALIZING;

return ntStatus;
}
tigerzd
驱动老牛
驱动老牛
  • 注册日期2001-08-25
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-08-23 17:15
ZwCreateFile(FileHandle,
 GENERIC_WRITE|SYNCHRONIZE|GENERIC_READ,
 &ObjectAttributes,
 &IoStatusBlock,
 0,
 FILE_ATTRIBUTE_NORMAL,
 FILE_SHARE_DELETE,
 FILE_OPEN_IF,
 FILE_SYNCHRONOUS_IO_NONALERT,
 NULL,
 0);
犯强汉者,虽远必诛! [img]http://www.driverdevelop.com/forum/upload/tigerzd/2002-12-13_sf10.JPG[/img]
stoneyr
驱动牛犊
驱动牛犊
  • 注册日期2002-01-13
  • 最后登录2007-10-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-08-23 19:46
对了
改了之后完全正确
给分了
谢谢版主
游客

返回顶部