NtQueryInformationFile 関数 (ntifs.h)
NtQueryInformationFile ルーチンは、ファイル オブジェクトに関するさまざまな種類の情報を返します。 いくつかのファイル情報クラスでより効率的に使用できる NtQueryInformationByNameのも参照してください。
構文
__kernel_entry NTSYSCALLAPI NTSTATUS NtQueryInformationFile(
[in] HANDLE FileHandle,
[out] PIO_STATUS_BLOCK IoStatusBlock,
[out] PVOID FileInformation,
[in] ULONG Length,
[in] FILE_INFORMATION_CLASS FileInformationClass
);
パラメーター
[in] FileHandle
ファイル オブジェクトへのハンドル。 ハンドルは、NtCreateFileまたは NtOpenFile、または同等のファイル作成ルーチンまたはオープン ルーチン正常に呼び出すことによって作成されます。
[out] IoStatusBlock
最終的な完了状態と操作に関する情報を受け取る IO_STATUS_BLOCK 構造体へのポインター。 Information メンバーは、このルーチンが実際に FileInformation バッファーに書き込むバイト数を受け取ります。
[out] FileInformation
ルーチンがファイル オブジェクトに関する要求された情報を書き込む呼び出し元によって割り当てられたバッファーへのポインター。 FileInformationClass パラメーターは、呼び出し元が要求する情報の種類を指定します。
[in] Length
FileInformationが指すバッファーのサイズ (バイト単位)。
[in] FileInformationClass
FileInformation が指すバッファー内の、ファイルに関して返される情報の種類 指定します。 デバイス ドライバーと中間ドライバーは、次のいずれかの FILE_INFORMATION_CLASS 値を指定できます (列挙値が最も小さい値から最大の値に一覧表示されます)。
FILE_INFORMATION_CLASS値 | 返される情報の種類 |
---|---|
FileBasicInformation (4) | FILE_BASIC_INFORMATION 構造体。 呼び出し元は、DesiredAccess パラメーターで指定されたFILE_READ_ATTRIBUTES フラグでファイルを開いている必要があります。 |
FileStandardInformation (5) | FILE_STANDARD_INFORMATION 構造体。 呼び出し元は、DesiredAccessの特定の要件なしで、ファイルが開いている限り、この情報を照会できます。 |
FileInternalInformation (6) | FILE_INTERNAL_INFORMATION 構造体。 この構造体は、NTFS 内のファイルを一意に識別する 64 ビット ファイル ID を指定します。 他のファイル システムでは、このファイル ID は一意であるとは限りません。 |
FileEaInformation (7) | FILE_EA_INFORMATION 構造体。 この構造体は、ファイルに関連付けられている拡張属性ブロックのサイズを指定します。 |
FileAccessInformation (8) | FILE_ACCESS_INFORMATION 構造体。 この構造体にはアクセス マスクが含まれています。 アクセス マスクの詳細については、ACCESS_MASKを参照してください。 |
FileNameInformation (9) | FILE_NAME_INFORMATION 構造体。 構造体には、ファイルの完全なパスまたはその一部のみを含めることができます。 呼び出し元は、DesiredAccessの特定の要件なしで、ファイルが開いている限り、この情報を照会できます。 ファイル名の構文の詳細については、このトピックで後述する「解説」セクションを参照してください。 |
FilePositionInformation (14) | FILE_POSITION_INFORMATION 構造体。 呼び出し元は、DesiredAccess パラメーターで指定された DesiredAccess FILE_READ_DATA フラグまたはFILE_WRITE_DATA フラグを指定し、CreateOptions パラメーターで指定されたFILE_SYNCHRONOUS_IO_ALERTフラグまたはFILE_SYNCHRONOUS_IO_NONALERT フラグを使用して、ファイルを開いている必要があります。 |
FileModeInformation (16) | FILE_MODE_INFORMATION 構造体。 この構造体には、ファイルにアクセスできるモードを指定するフラグのセットが含まれています。 これらのフラグは、IoCreateFile ルーチンの CreateOptions パラメーターで指定できるオプションのサブセットです。 |
FileAlignmentInformation (17) | FILE_ALIGNMENT_INFORMATION 構造体。 呼び出し元は、DesiredAccessの特定の要件なしで、ファイルが開いている限り、この情報を照会できます。 この情報は、CreateOptions パラメーターで指定されたFILE_NO_INTERMEDIATE_BUFFERING フラグでファイルを開いた場合に役立ちます。 |
FileAllInformation (18) | FILE_ALL_INFORMATION 構造体。 複数のファイル情報構造を 1 つの構造に結合することで、FILE_ALL_INFORMATION ファイルに関する情報を取得するために必要なクエリの数を減らすことができます。 |
FileAlternateNameInformation (21) | ファイルの代替名情報 (その 8.3 形式名) を返す FILE_ALL_INFORMATION 構造体。 |
FileStreamInformation (22) | ファイルまたはディレクトリのデータ ストリームを列挙する FILE_STREAM_INFORMATION 構造体のバッファー。 |
FileCompressionInformation (28) | ファイルの圧縮情報を返す FILE_COMPRESSION_INFORMATION 構造体。 |
FileNetworkOpenInformation (34) | FILE_NETWORK_OPEN_INFORMATION 構造体。 呼び出し元は、DesiredAccess パラメーターで指定されたFILE_READ_ATTRIBUTES フラグでファイルを開いている必要があります。 |
FileAttributeTagInformation (35) | FILE_ATTRIBUTE_TAG_INFORMATION 構造体。 呼び出し元は、DesiredAccess パラメーターで指定されたFILE_READ_ATTRIBUTES フラグでファイルを開いている必要があります。 |
FileIoPriorityHintInformation (43) | FILE_IO_PRIORITY_HINT_INFORMATION 構造体。 呼び出し元は、DesiredAccess パラメーターで指定されたFILE_READ_DATA フラグでファイルを開いている必要があります。 |
FileSfioReserveInformation (44) | FILE_SFIO_RESERVE_INFORMATION 構造体。 |
FileHardLinkInformation (46) | FILE_LINKS_INFORMATION 構造体。 |
FileNormalizedNameInformation (48) | ファイルの正規化された名前を返す FILE_NAME_INFORMATION 構造体。 |
FileIsRemoteDeviceInformation (51) | FILE_IS_REMOTE_DEVICE_INFORMATION 構造体。 呼び出し元は、DesiredAccessの特定の要件なしで、ファイルが開いている限り、この情報を照会できます。 |
FileStandardLinkInformation (54) | FILE_STANDARD_LINK_INFORMATION 構造体。 |
FileIdInformation (59) | FILE_ID_INFORMATION 構造体。 |
FileDesiredStorageClassInformation (67) | FILE_DESIRED_STORAGE_CLASS_INFORMATION 構造体。 |
FileStatInformation (68) | FILE_STAT_INFORMATION |
FileStatLxInformation (70) | FILE_STAT_LX_INFORMATION |
FileCaseSensitiveInformation (71) | FILE_CASE_SENSITIVE_INFORMATION 構造体。 呼び出し元は、DesiredAccess パラメーターで指定されたFILE_READ_ATTRIBUTES フラグでファイルを開いている必要があります。 この値は、Windows 10 バージョン 1803 以降で使用できます。 |
FileStorageReserveIdInformation (74) | FILE_STORAGE_RESERVE_ID_INFORMATION 構造体。 |
FileCaseSensitiveInformationForceAccessCheck (75) | FILE_CASE_SENSITIVE_INFORMATION 構造体。 呼び出し元は、DesiredAccess パラメーターで指定されたFILE_READ_ATTRIBUTES フラグでファイルを開いている必要があります。 これは FileCaseSensitiveInformation 操作の特別なバージョンです。これは、ユーザー モードの呼び出し元に適用されるチェックと同様に、IOManager でカーネル モード ドライバーのアクセス チェックを強制的に実行するために使用されます。 この操作は IOManager によってのみ認識され、ファイル システムは IOManager を受け取ることはありません。 この値は、Windows 10 バージョン 1803 以降で使用できます。 |
FileKnownFolderInformation (76) | FILE_KNOWN_FOLDER_INFORMATION 構造体。 Windows Server 2022 以降で使用できます。 |
戻り値
NtQueryInformationFile は、STATUS_SUCCESSまたは適切な NTSTATUS エラー コードを返します。
備考
NtQueryInformationFile は、指定したファイル オブジェクトに関する情報を返します。 特定のデバイスまたはファイル システムでサポートされていない FILE_XXX_INFORMATION 構造体のメンバーでは 0 が返されることに注意してください。
FileInformationClass = FileNameInformationをすると、ファイル名が FILE_NAME_INFORMATION 構造体に返されます。 ファイル名の正確な構文は、さまざまな要因によって異なります。
NtCreateFileへの完全パス送信してファイルを開いた場合、NtQueryInformationFile はその完全なパスを返します。
ObjectAttributes->RootDirectory ハンドルが、NtCreateFileの呼び出しで名前で開かれた後、このルート ディレクトリ ハンドルに対して NtCreateFile によってファイルが開かれた場合、NtQueryInformationFile は完全なパスを返します。
ObjectAttributes->RootDirectory ハンドルが、NtCreateFileの呼び出しでファイル ID (FILE_OPEN_BY_FILE_ID フラグを使用) によって開かれた後、このルート ディレクトリ ハンドルに対する相対パス NtCreateFile によってファイルが開かれた場合 、NtQueryInformationFile は相対パスを返します。
ただし、ユーザーが SeChangeNotifyPrivilege (Microsoft Windows SDK ドキュメントで説明) を している場合、NtQueryInformationFile は、すべてのケースで完全なパスを返します。
相対パスのみが返される場合、ファイル名の文字列は円記号で始まっていません。
完全なパスとファイル名が返された場合、文字列は場所に関係なく、1 つの円記号で始まります。 したがって、ファイル C:\dir1\dir2\filename.ext は \dir1\dir2\filename.ext として表示され、ファイル \server\share\dir1\dir2\filename.ext は \server\share\dir1\dir2\filename.ext として表示されます。
バッファー オーバーフローのために NtQueryInformationFile 失敗した場合、fileNameInformation を実装するドライバーは、バッファーに収まる数のファイル名の WCHAR 文字を返し、FILE_NAME_INFORMATION 構造体の FileNameLength パラメーターに必要な完全な長さを指定する必要があります。 完全なファイル名を取得できるように、ファイル名の長さを使用してクエリを再発行する必要があります。 このパターンに従わないドライバーでは、完全なファイル名を取得するまで、徐々に長さが増える必要があります。 ファイルの操作の詳細については、「ドライバー でのファイルの使用」を参照してください。
NtQueryInformationFile の呼び出し元は、IRQL = PASSIVE_LEVEL で実行され、特殊なカーネル API が有効になっている 必要があります。
手記
この関数の呼び出しがユーザー モードで発生する場合は、"ZwQueryInformationFile" ではなく"NtQueryInformationFile" という名前を使用する必要があります。
カーネル モード ドライバーからの呼び出しの場合、Windows ネイティブ システム サービス ルーチンの NtXxx および ZwXxx バージョンは、入力パラメーターを処理および解釈する方法で動作が異なる場合があります。 ルーチンの NtXxx と ZwXxx バージョンの間の関係の詳細については、「ネイティブ システム サービス ルーチンの Nt および Zw バージョンの使用 を参照してください。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows 2000。 |
ターゲット プラットフォーム の | 万国 |
ヘッダー | ntifs.h (Wdm.h、Ntddk.h、Ntifs.h を含む) |
ライブラリ | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL (「解説」セクションを参照) |
DDI コンプライアンス規則 を する | HwStorPortProhibitedDIs、PowerIrpDDis |
関連項目
FILE_ATTRIBUTE_TAG_INFORMATION
FILE_IO_PRIORITY_HINT_INFORMATION
FILE_IS_REMOTE_DEVICE_INFORMATION
ネイティブ システム サービス ルーチンの Nt バージョンと Zw バージョンを使用した
NtCreateFileをする
NtQueryInformationByNameの
NtSetInformationFileの