Ottenimento delle informazioni di riconoscimento del file system
il riconoscimento del sistema di file è la capacità di riconoscere dispositivi di archiviazione che contengono un layout di file system/volume valido ancora non definito, ma che sono in grado di identificarsi tramite la presenza della struttura di riconoscimento definita internamente da Windows.
Poiché nessun file system esistente riconoscerà un nuovo layout del disco, il file system "RAW" monterà il volume e fornirà l'accesso diretto a livello di blocco. Il file system "RAW", incorporato in NtosKrnl, avrà la possibilità di leggere la struttura di riconoscimento del file system e fornire alle applicazioni l'accesso a tali strutture tramite la richiesta di controllo del file system FSCTL_QUERY_FILE_SYSTEM_RECOGNITION, illustrato nell'esempio seguente.
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;
}
Argomenti correlati