Dosya Sistemi Tanıma Bilgilerini Alma

Dosya sistemi tanıma, henüz tanımlanmamış geçerli bir dosya sistemi/birim düzeni içeren depolama medyasını tanıyabilme özelliğidir, ancak medya, Windows tarafından dahili olarak tanımlanan tanıma yapısının varlığıyla kendisini tanımlayabilir.

Mevcut hiçbir dosya sistemi yeni bir disk düzenini tanımayacağından, "RAW" dosya sistemi birimi bağlar ve doğrudan blok düzeyi erişimi sağlar. NtosKrnlile birleştirilmiş "RAW" dosya sistemi, dosya sistemi tanıma yapısını okuma ve aşağıdaki örnekte gösterilen FSCTL_QUERY_FILE_SYSTEM_RECOGNITIONdosya sistemi denetim isteği aracılığıyla uygulamalara bu tür yapılara erişim sağlama özelliğine sahip olacaktır.

STDMETHODIMP CheckFileSystem(
    PCWSTR pcwszDrive
    ) 
{
    HRESULT hr = S_OK;
    HANDLE  hDisk = INVALID_HANDLE_VALUE;
    BOOL    fResult = FALSE;    
    ULONG   BytesReturned = 0;    
    FILE_SYSTEM_RECOGNITION_INFORMATION     FsRi = {0};
    
    //
    // Open the target, for example "\\.\C:"
    //
    wprintf( L"CreateFile on %s...", pcwszDrive );
    hDisk = CreateFile( pcwszDrive, 
                        FILE_READ_ATTRIBUTES|SYNCHRONIZE|FILE_TRAVERSE,                        
                        FILE_SHARE_READ|FILE_SHARE_WRITE,
                        NULL, OPEN_EXISTING, 0, NULL );    
    if( hDisk == INVALID_HANDLE_VALUE ) 
    {
        hr = HRESULT_FROM_WIN32( GetLastError() );
        wprintf( L"CreateFile failed on %s, GLE = 0x%x\n", pcwszDrive, GetLastError() );
        goto exit;
    }
    wprintf( L"succeeded.\n\n" );

    wprintf( L"\nPress Any Key to send down the FSCTL\n" );
    _getwch();

    //
    // Send down the FSCTL
    //
    wprintf( L"Calling DeviceIoControl( FSCTL_QUERY_FILE_SYSTEM_RECOGNITION ) " );
    
    fResult = DeviceIoControl( hDisk, 
                               FSCTL_QUERY_FILE_SYSTEM_RECOGNITION, 
                               NULL, 
                               0, 
                               &FsRi, 
                               sizeof(FsRi), 
                               &BytesReturned, 
                               NULL );
    if( !fResult ) 
    {
        hr = HRESULT_FROM_WIN32( GetLastError() );
        wprintf( L"failed GLE = 0x%x\n", GetLastError() );
        goto exit;
    }
    wprintf( L"succeeded.\n\n" );

    wprintf( L"FSCTL_QUERY_FILE_SYSTEM_RECOGNITION returned success.\n" );

    wprintf( L"FSCTL_QUERY_FILE_SYSTEM_RECOGNITION retrieved \"%S\".\n",
              FsRi.FileSystem );

exit:

    if( hDisk != INVALID_HANDLE_VALUE ) 
    {
        CloseHandle( hDisk );
        hDisk = INVALID_HANDLE_VALUE;
    }

    return hr;
}

Dosya Sistemi Tanıma

DOSYA_SİSTEMİ_TANIMA_YAPISI

FSCTL_QUERY_FILE_SYSTEM_RECOGNITION