阅读:1556回复:3
*为什么会崩*
FileDisk 中的 VirtualdiskOpenFile(* * *)
NTSTATUS ntStatus; ANSI_STRING aFilePath; UNICODE_STRING uFilePath; PFILE_INFORMATION pFileInfo; OBJECT_ATTRIBUTES Obj_attribute; PIO_STACK_LOCATION pIrpStack; IO_STATUS_BLOCK IoStatus; pIrpStack = IoGetCurrentIrpStackLocation(pIrp); pFileInfo = (PFILE_INFORMATION)pIrp->AssociatedIrp.SystemBuffer; //First ANSI_STRING aFilePath.Length = pFileInfo->PathLength; aFilePath.MaximumLength = pFileInfo->PathLength; aFilePath.Buffer = pFileInfo->PathName; DbgPrint("the filepathbuffer is %s\n", aFilePath.Buffer); //Change it into UNICODE_STRING ntStatus = RtlAnsiStringToUnicodeString( &uFilePath, &aFilePath, FALSE ); if( !NT_SUCCESS(ntStatus) ) { DbgPrint("fail to convert the ansi to unicode !\n"); pIrp->IoStatus.Status = ntStatus; pIrp->IoStatus.Information = 0; return ntStatus; } DbgPrint("the file path is %S, %u, %u \n", uFilePath.Buffer, uFilePath.Length, uFilePath.MaximumLength); InitializeObjectAttributes( &Obj_attribute, &uFilePath, OBJ_CASE_INSENSITIVE, NULL, NULL ); ntStatus = ZwCreateFile( &pDeviceExt->hFile, GENERIC_READ | GENERIC_WRITE, &Obj_attribute, &IoStatus, NULL, FILE_ATTRIBUTE_NORMAL, 0, FILE_OPEN, FILE_NON_DIRECTORY_FILE | FILE_RANDOM_ACCESS | FILE_NO_INTERMEDIATE_BUFFERING | FILE_SYNCHRONOUS_IO_NONALERT, NULL, 0 ); RtlFreeUnicodeString(&uFilePath); if( !NT_SUCCESS(ntStatus) ) { DbgPrint("Fail to open file !\n"); return ntStatus; } //To get the size of the FileVirtualdisk ntStatus = ZwQueryInformationFile( pDeviceExt->hFile, &IoStatus, &pDeviceExt->sFile, sizeof(FILE_STANDARD_INFORMATION), FileStandardInformation ); if( !NT_SUCCESS(ntStatus) ) { DbgPrint("Fail to get the filesize\n"); ZwClose(pDeviceExt->hFile); return ntStatus; } DbgPrint("get the filesize is %u.\n",pDeviceExt->sFile.EndOfFile.QuadPart); pDeviceExt->MediaInDevice = TRUE; pIrp->IoStatus.Status = STATUS_SUCCESS; pIrp->IoStatus.Information = 0; return ntStatus; |
|
|
沙发#
发布于:2004-04-01 20:55
是不是重入了
|
|
板凳#
发布于:2004-04-02 08:14
当然没了
|
|
|
地板#
发布于:2004-04-02 09:05
你在哪个地方崩溃的???
|
|
|