При асинхронном записи\чтения данных по пайпу, получаю BSOD ... Мой код отрабатывает нормально, то и есть подения не в моем коде, но из за него Стек Код (Text): 807fedf0 8292670d 0000004e 0000009a 000cf074 nt!KeBugCheckEx+0x1e 807fee08 8295b823 00000000 00003000 00000000 nt!MiBadRefCount+0x26 807feee8 8295c43c 85474000 00003000 85439c60 nt!MiFreePoolPages+0x124 807fef54 8b6134bd 85474000 00000000 807fef84 nt!ExFreePoolWithTag+0x436 807fef64 8b612a87 85fe40d8 85302888 85474000 Ntfs!NtfsDeleteMdlAndBuffer+0x43 807fef84 8b6124c8 807ff240 85439c60 807fefa0 Ntfs!NtfsDeallocateCompressionBuffer+0x46 807fef98 8b612392 85474000 00003000 807ff4a0 Ntfs!NtfsNonCachedIo+0x836 807ff0b4 8b60c8fb 807ff240 85439c60 85ff35a8 Ntfs!NtfsNonCachedIo+0x705 807ff11c 8b610fa9 807ff240 85439c60 85ff35a8 Ntfs!NtfsNonCachedUsaWrite+0x145 807ff230 8b61285f 807ff240 85439c60 0120070a Ntfs!NtfsCommonWrite+0x1dc0 807ff3d4 828794bc 85fe4020 85439c60 85439c60 Ntfs!NtfsFsdWrite+0x2e1 807ff3ec 8b56320c 85fe7ed8 85439c60 00000000 nt!IofCallDriver+0x63 807ff410 8b5633cb 807ff430 85fe7ed8 00000000 fltmgr!FltpLegacyProcessingAfterPreCallbacksCompleted+0x2aa 807ff448 828794bc 85fe7ed8 85439c60 85439c60 fltmgr!FltpDispatch+0xc5 807ff460 82871749 807ff4a0 00000000 807ff708 nt!IofCallDriver+0x63 807ff474 828d7aff 85ff34f8 85fe7ed8 807ff540 nt!IoSynchronousPageWrite+0x19d 807ff5a4 828d8f85 8d487ab0 8d487ac8 85ff3338 nt!MiFlushSectionInternal+0x828 807ff60c 828cc841 00ff2124 00003000 00000005 nt!MmFlushSection+0xc2 807ff6a4 8b60c1e7 85ff2124 807ff750 00003000 nt!CcFlushCache+0x156 807ff778 8b68438c 8c453228 293eb235 00000000 Ntfs!LfsFlushLfcb+0x478 807ff7cc 8b67e03a 01453228 293eb235 00000000 Ntfs!LfsFlushToLsnPriv+0x1a7 807ff814 8b67d653 8c453228 00000001 00000000 Ntfs!LfsWriteLfsRestart+0x160 807ff85c 8b6b20de 8c5ba0c8 00000070 807ff9b0 Ntfs!LfsWriteRestartArea+0x120 807ffadc 8b6b0b3a 807ffbdc 85fe40d8 00000000 Ntfs!NtfsCheckpointVolume+0x1185 807ffb30 8b6b2731 807ffbdc 85fe40d8 807ffcff Ntfs!NtfsCheckpointAllVolumesWorker+0x3b 807ffb90 8b6b0c45 807ffbdc 00000000 8b6b0aff Ntfs!NtfsForEachVcb+0x10c 807ffd00 828aaf2b 00000000 00000000 851c6c08 Ntfs!NtfsCheckpointAllVolumes+0xac 807ffd50 82a4b66d 00000000 b184f9ef 00000000 nt!ExpWorkerThread+0x10d 807ffd90 828fd0d9 828aae1e 00000000 00000000 nt!PspSystemThreadStartup+0x9e 00000000 00000000 00000000 00000000 00000000 nt!KiThreadStartup+0x19
То и есть в стеке моего драйвера нету ... Чтения пакета(запись практичекски такая же ) Код (Text): NTSTATUS Status; PFILE_OBJECT FileObject; PIRP pIrp; LARGE_INTEGER Offset; PIO_STACK_LOCATION StackPtr; // // Get reference to object // Status = ObReferenceObjectByHandle( PipeHandle, FILE_WRITE_DATA, NULL, KernelMode, (PVOID *) &FileObject, NULL ); if ( Status != STATUS_SUCCESS ) { return Status; } Offset.QuadPart = 0; // // Build read request // pIrp = IoBuildAsynchronousFsdRequest( IRP_MJ_READ, FileObject->DeviceObject, Buffer, Length, &Offset, NULL ); if ( pIrp == NULL ) { ObDereferenceObject( PipeHandle ); return STATUS_ACCESS_DENIED; // Fix me! } // // Set stack pointer // StackPtr = IoGetNextIrpStackLocation( pIrp ); StackPtr->FileObject = FileObject; StackPtr->Parameters.Write.Key = 0; // // Set complete routine. // IoSetCompletionRoutine( pIrp, pIoCompleteRoutine, Param, TRUE, TRUE, TRUE ); // // Execute request // Status = IoCallDriver( FileObject->DeviceObject, pIrp ); ObDereferenceObject( FileObject ); return Status;
Мда.. никогда не оставляйте такие ситуации нерешенными до конца. Это признак неумелости. Специалисты так не работают. Это совет, на будущее.