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