NTFS, Pipes

Тема в разделе "WASM.NT.KERNEL", создана пользователем IceCrashLdr, 20 июл 2010.

  1. IceCrashLdr

    IceCrashLdr New Member

    Публикаций:
    0
    Регистрация:
    29 июн 2010
    Сообщения:
    193
    При асинхронном записи\чтения данных по пайпу, получаю BSOD ...
    Мой код отрабатывает нормально, то и есть подения не в моем коде, но из за него :)

    Стек
    Код (Text):
    1. 807fedf0 8292670d 0000004e 0000009a 000cf074 nt!KeBugCheckEx+0x1e
    2. 807fee08 8295b823 00000000 00003000 00000000 nt!MiBadRefCount+0x26
    3. 807feee8 8295c43c 85474000 00003000 85439c60 nt!MiFreePoolPages+0x124
    4. 807fef54 8b6134bd 85474000 00000000 807fef84 nt!ExFreePoolWithTag+0x436
    5. 807fef64 8b612a87 85fe40d8 85302888 85474000 Ntfs!NtfsDeleteMdlAndBuffer+0x43
    6. 807fef84 8b6124c8 807ff240 85439c60 807fefa0 Ntfs!NtfsDeallocateCompressionBuffer+0x46
    7. 807fef98 8b612392 85474000 00003000 807ff4a0 Ntfs!NtfsNonCachedIo+0x836
    8. 807ff0b4 8b60c8fb 807ff240 85439c60 85ff35a8 Ntfs!NtfsNonCachedIo+0x705
    9. 807ff11c 8b610fa9 807ff240 85439c60 85ff35a8 Ntfs!NtfsNonCachedUsaWrite+0x145
    10. 807ff230 8b61285f 807ff240 85439c60 0120070a Ntfs!NtfsCommonWrite+0x1dc0
    11. 807ff3d4 828794bc 85fe4020 85439c60 85439c60 Ntfs!NtfsFsdWrite+0x2e1
    12. 807ff3ec 8b56320c 85fe7ed8 85439c60 00000000 nt!IofCallDriver+0x63
    13. 807ff410 8b5633cb 807ff430 85fe7ed8 00000000 fltmgr!FltpLegacyProcessingAfterPreCallbacksCompleted+0x2aa
    14. 807ff448 828794bc 85fe7ed8 85439c60 85439c60 fltmgr!FltpDispatch+0xc5
    15. 807ff460 82871749 807ff4a0 00000000 807ff708 nt!IofCallDriver+0x63
    16. 807ff474 828d7aff 85ff34f8 85fe7ed8 807ff540 nt!IoSynchronousPageWrite+0x19d
    17. 807ff5a4 828d8f85 8d487ab0 8d487ac8 85ff3338 nt!MiFlushSectionInternal+0x828
    18. 807ff60c 828cc841 00ff2124 00003000 00000005 nt!MmFlushSection+0xc2
    19. 807ff6a4 8b60c1e7 85ff2124 807ff750 00003000 nt!CcFlushCache+0x156
    20. 807ff778 8b68438c 8c453228 293eb235 00000000 Ntfs!LfsFlushLfcb+0x478
    21. 807ff7cc 8b67e03a 01453228 293eb235 00000000 Ntfs!LfsFlushToLsnPriv+0x1a7
    22. 807ff814 8b67d653 8c453228 00000001 00000000 Ntfs!LfsWriteLfsRestart+0x160
    23. 807ff85c 8b6b20de 8c5ba0c8 00000070 807ff9b0 Ntfs!LfsWriteRestartArea+0x120
    24. 807ffadc 8b6b0b3a 807ffbdc 85fe40d8 00000000 Ntfs!NtfsCheckpointVolume+0x1185
    25. 807ffb30 8b6b2731 807ffbdc 85fe40d8 807ffcff Ntfs!NtfsCheckpointAllVolumesWorker+0x3b
    26. 807ffb90 8b6b0c45 807ffbdc 00000000 8b6b0aff Ntfs!NtfsForEachVcb+0x10c
    27. 807ffd00 828aaf2b 00000000 00000000 851c6c08 Ntfs!NtfsCheckpointAllVolumes+0xac
    28. 807ffd50 82a4b66d 00000000 b184f9ef 00000000 nt!ExpWorkerThread+0x10d
    29. 807ffd90 828fd0d9 828aae1e 00000000 00000000 nt!PspSystemThreadStartup+0x9e
    30. 00000000 00000000 00000000 00000000 00000000 nt!KiThreadStartup+0x19
     
  2. IceCrashLdr

    IceCrashLdr New Member

    Публикаций:
    0
    Регистрация:
    29 июн 2010
    Сообщения:
    193
    То и есть в стеке моего драйвера нету ...

    Чтения пакета(запись практичекски такая же )
    Код (Text):
    1.     NTSTATUS           Status;
    2.     PFILE_OBJECT       FileObject;
    3.     PIRP               pIrp;
    4.     LARGE_INTEGER      Offset;
    5.     PIO_STACK_LOCATION StackPtr;
    6.  
    7.     //
    8.     // Get reference to object
    9.     //
    10.     Status = ObReferenceObjectByHandle(
    11.         PipeHandle,
    12.         FILE_WRITE_DATA,
    13.         NULL,
    14.         KernelMode,
    15.         (PVOID *) &FileObject,
    16.         NULL
    17.         );
    18.  
    19.     if ( Status != STATUS_SUCCESS ) {
    20.         return Status;
    21.     }
    22.  
    23.     Offset.QuadPart = 0;
    24.    
    25.     //
    26.     // Build read request
    27.     //
    28.     pIrp = IoBuildAsynchronousFsdRequest(
    29.         IRP_MJ_READ,
    30.         FileObject->DeviceObject,
    31.         Buffer,
    32.         Length,
    33.         &Offset,
    34.         NULL
    35.         );
    36.  
    37.     if ( pIrp == NULL ) {
    38.         ObDereferenceObject( PipeHandle );
    39.         return STATUS_ACCESS_DENIED; // Fix me!
    40.     }
    41.  
    42.     //
    43.     // Set stack pointer
    44.     //
    45.     StackPtr = IoGetNextIrpStackLocation( pIrp );
    46.     StackPtr->FileObject = FileObject;
    47.     StackPtr->Parameters.Write.Key = 0;
    48.  
    49.     //
    50.     // Set complete routine.
    51.     //
    52.     IoSetCompletionRoutine(
    53.         pIrp,
    54.         pIoCompleteRoutine,
    55.         Param,
    56.         TRUE,
    57.         TRUE,
    58.         TRUE
    59.         );
    60.  
    61.     //
    62.     // Execute request
    63.     //
    64.     Status = IoCallDriver(
    65.         FileObject->DeviceObject,
    66.         pIrp
    67.         );
    68.  
    69.     ObDereferenceObject( FileObject );
    70.  
    71.     return Status;
     
  3. IceCrashLdr

    IceCrashLdr New Member

    Публикаций:
    0
    Регистрация:
    29 июн 2010
    Сообщения:
    193
    Не актуально ...
     
  4. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Ты забыл написать, в чём было дело.
     
  5. IceCrashLdr

    IceCrashLdr New Member

    Публикаций:
    0
    Регистрация:
    29 июн 2010
    Сообщения:
    193
    Честно говоря особо не разбирался, вроде как из за ZwClose в Callback с Pendig IPR b но IoFreeIrp. :)
     
  6. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Мда.. никогда не оставляйте такие ситуации нерешенными до конца. Это признак неумелости. Специалисты так не работают. Это совет, на будущее.
     
  7. IceCrashLdr

    IceCrashLdr New Member

    Публикаций:
    0
    Регистрация:
    29 июн 2010
    Сообщения:
    193
    TermoSINteZ
    Я делал тест для Pipe server , и собственно говоря драйвер еще на тест не передается ... :)