Udostępnij za pośrednictwem


Uzyskiwanie informacji o rozpoznawaniu systemu plików

rozpoznawanie systemu plików to zdolność rozpoznawania nośników danych zawierających prawidłowy układ systemu plików/woluminu, który nie został jeszcze zdefiniowany, ale nośnik jest w stanie zidentyfikować się za pomocą struktury rozpoznawania zdefiniowanej wewnętrznie przez system Windows.

Ponieważ żaden istniejący system plików nie rozpozna nowego układu dysku, system plików "RAW" zainstaluje wolumin i zapewni bezpośredni dostęp na poziomie bloku. System plików "RAW", włączony w NtosKrnl, będzie miał możliwość odczytywania struktury rozpoznawania systemu plików i zapewniania aplikacjom dostępu do takich struktur za pośrednictwem żądania kontroli systemu plików FSCTL_QUERY_FILE_SYSTEM_RECOGNITION, jak pokazano w poniższym przykładzie.

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;
}

Rozpoznawanie systemu plików

STRUKTURA_ROZPOZNAWANIA_SYSTEMU_PLIKÓW

FSCTL_QUERY_FILE_SYSTEM_RECOGNITION