BSOD при работе с файлами

Тема в разделе "WASM.NT.KERNEL", создана пользователем AntiB, 15 окт 2009.

  1. AntiB

    AntiB New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2007
    Сообщения:
    393
    Доброго времени суток!
    У меня трабл, идет бсод, а почему - хз, вот код что бсодит:
    Код (Text):
    1. NTSTATUS
    2. FilterGetFileName (
    3.     IN      PCFLT_RELATED_OBJECTS FltObjects,
    4.     OUT     PUNICODE_STRING FileName
    5.     )
    6. {
    7.     NTSTATUS status = STATUS_SUCCESS;
    8.     ULONG BufferSize;
    9.  
    10.     if (FltObjects == NULL)
    11.         return STATUS_UNSUCCESSFUL;
    12.  
    13.     if (FileName == NULL)
    14.         return STATUS_UNSUCCESSFUL;
    15.  
    16.     FltGetVolumeName( FltObjects->Volume,
    17.                       NULL,
    18.                       &BufferSize );
    19.  
    20.     if (FltObjects->FileObject->RelatedFileObject != NULL)
    21.         BufferSize += FltObjects->FileObject->RelatedFileObject->FileName.Length;
    22.  
    23.     BufferSize += FltObjects->FileObject->FileName.Length;
    24.  
    25.     status = InitUnicodeString( FileName,
    26.                                 BufferSize,
    27.                                 NonPagedPool );
    28.  
    29.     if (!NT_SUCCESS( status )) {
    30.         return status;
    31.     }
    32.  
    33.     status = FltGetVolumeName( FltObjects->Volume,
    34.                                FileName,
    35.                                NULL );
    36.  
    37.     if (NT_SUCCESS( status )) {
    38.  
    39.         if (FltObjects->FileObject->RelatedFileObject != NULL) {
    40.             if (FltObjects->FileObject->RelatedFileObject->FileName.Length != 0)
    41.                 status = RtlAppendUnicodeStringToString( FileName,
    42.                                                          &FltObjects->FileObject->RelatedFileObject->FileName );
    43.         }
    44.  
    45.         if (FltObjects->FileObject->FileName.Length != 0)
    46.             status = RtlAppendUnicodeStringToString( FileName,
    47.                                                      &FltObjects->FileObject->FileName );
    48.  
    49.     }
    50.  
    51.     return status;
    52. }
    InitUnicodeString - моя функция которая в пуле выделяет память для строки.

    бсод идет на первом RtlAppendUnicodeStringToString и ошибка: CACHE_MANAGER (34)

    Заранее спасибо за любую помощь!
     
  2. AntiB

    AntiB New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2007
    Сообщения:
    393
    BSOD происходит когда обрабатываю IRP_MJ_SET_INFORMATION, но когда обрабатываю IRP_MJ_CREATE - то все гуд, почему так? какая разница между данными что юзаю в IRP_MJ_SET_INFORMATION и IRP_MJ_CREATE (код в двоих обработчиков одинаковый)