阅读:3671回复:8
关于ZwWriteFile的问题
我在AddDevice里调用ZwWriteFile想写一点东西到一个文件里(只是一个练习),但是失败了,为什么?我从设备管理器里看到错误代码是31,是什么意思?什么地方有相关的资料?
|
|
最新喜欢:cyliu |
沙发#
发布于: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; } |
|
板凳#
发布于:2002-08-22 21:04
还有,文件已经顺利打开了的。
|
|
地板#
发布于:2002-08-22 21:33
用softice跟踪一下, 看看是不是这里出的错.
|
|
|
地下室#
发布于:2002-08-22 22:23
SoftIce我还不太会用
而且在我的机器上,一启动SoftIce就死机,不知道为什么 我敢肯定是这个地方出的错 因为 在我打开的文件里是空白的,什么东西也没有,说明没写进什么东西,文件是正确打开的了,要不然就没有出现文件名在文件夹里。 另外,如果我忽略它返回的ntStatus的话,这个驱动是可以运行的,也就是说在设备管理器里驱动程序上没有那个叹号。而不忽略这个返回值的话就什么出现那个叹号。我想就应该是那个地方的错吧。 |
|
5楼#
发布于:2002-08-23 08:36
1、看看ZwCreateFile的参数设置。
2、检查调用ZwWriteFile的IRQL。 |
|
|
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; } |
|
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); |
|
|
8楼#
发布于:2002-08-23 19:46
对了
改了之后完全正确 给分了 谢谢版主 |
|