NtSetInformationFile ルーチンは、ファイル オブジェクトに関するさまざまな種類の情報を変更します。
構文
__kernel_entry NTSYSCALLAPI NTSTATUS NtSetInformationFile(
[in] HANDLE FileHandle,
[out] PIO_STATUS_BLOCK IoStatusBlock,
[in] PVOID FileInformation,
[in] ULONG Length,
[in] FILE_INFORMATION_CLASS FileInformationClass
);
パラメーター
[in] FileHandle
ファイル オブジェクトへのハンドル。 このハンドルは、NtCreateFileまたは NtOpenFile正常に呼び出すことによって作成されます。
[out] IoStatusBlock
最終的な完了状態と要求された操作に関する情報を受け取る IO_STATUS_BLOCK 構造体へのポインター。 情報 メンバーは、ファイルに設定されたバイト数を受け取ります。
[in] FileInformation
ファイルに設定する情報を含むバッファーへのポインター。 このバッファー内の特定の構造体は、FileInformationClass パラメーターによって決定されます。 たとえば、FileInformationClass パラメーターが FileDispositionInformationEx 定数に設定されている場合、このパラメーターは FILE_DISPOSITION_INFORMATION_EX 構造体へのポインターである必要があります。
[in] Length
FileInformation バッファーのサイズ (バイト単位)。
[in] FileInformationClass
fileInformation が指すバッファーで指定された、ファイルに設定する情報の種類。 デバイス ドライバーと中間ドライバーは、次の FILE_INFORMATION_CLASS 値のいずれかを指定できます。
FILE_INFORMATION_CLASS値 | 返される情報の種類 |
---|---|
FileBasicInformation (4) | FILE_BASIC_INFORMATION 構造体で提供される情報を変更します。 呼び出し元は、DesiredAccess パラメーターに FILE_WRITE_ATTRIBUTES フラグを設定してファイルを開いている必要があります。 |
FileRenameInformation (10) | FILE_RENAME_INFORMATION 構造体で指定されている現在のファイル名を変更します。 呼び出し元には、ファイルへの DELETE アクセス権が必要です。 |
FileDispositionInformation (13) | ファイルが閉じられたときに削除を要求するか、以前に要求された削除を取り消します。 削除するか取り消すかの選択は、FILE_DISPOSITION_INFORMATION 構造体で指定されます。 呼び出し元は、DesiredAccess パラメーターに DELETE フラグを設定してファイルを開いている必要があります。 |
FilePositionInformation (14) | FILE_POSITION_INFORMATION 構造に格納されている現在のファイル情報を変更します。 |
FileEndOfFileInformation (20) | FILE_END_OF_FILE_INFORMATION 構造体で提供されている現在のファイルの終わりの情報を変更します。 この操作では、ファイルを切り捨てたり拡張したりすることができます。 呼び出し元は、DesiredAccess パラメーターに FILE_WRITE_DATA フラグを設定してファイルを開いている必要があります。 |
FileValidDataLengthInformation (39) | ファイルの現在の有効なデータ長を変更します。この長さは、FILE_VALID_DATA_LENGTH_INFORMATION 構造体で指定されます。 ファイルは NTFS ボリューム上にあり、呼び出し元は DesiredAccess パラメーターに FILE_WRITE_DATA フラグを設定してファイルを開いている必要があります。 管理者以外のユーザーとリモート ユーザーは、SeManageVolumePrivilege 特権を持っている必要があります。 |
FileShortNameInformation (40) | FILE_NAME_INFORMATION 構造体で指定されている現在の短いファイル名を変更します。 ファイルは NTFS ボリューム上にあり、呼び出し元は、DesiredAccess パラメーターに DesiredAccess DELETE フラグを設定してファイルを開いている必要があります。 |
FileIoPriorityHintInformation (43) | ファイル ハンドルの現在の既定の IRP 優先度ヒントを変更します。 新しい値は、FILE_IO_PRIORITY_HINT_INFORMATION 構造体で指定されます。 この構造体は 8 バイトでアラインされている必要があります。 |
FileReplaceCompletionInformation (61) | 指定したファイル ハンドルの I/O 完了ポートを変更または削除します。 呼び出し元は、ポート ハンドルと完了キーを指定する FILE_COMPLETION_INFORMATION 構造体へのポインターを提供します。 ポート ハンドルが NULL 以外の場合、このハンドルは、ファイル ハンドルに関連付ける新しい I/O 完了ポートを指定します。 ファイル ハンドルに関連付けられている I/O 完了ポートを削除するには、構造体のポート ハンドルを NULL に設定します。 ポート ハンドルを取得するために、ユーザー モードの呼び出し元は、CreateIoCompletionPort 関数を呼び出すことができます。 |
FileDispositionInformationEx (64) | ファイルの削除または以前に要求された削除の取り消しを要求します。 削除するか取り消すかの選択、および削除を実行するタイミングと方法の設定は、FILE_DISPOSITION_INFORMATION_EX 構造で指定されます。 呼び出し元は、DesiredAccess パラメーターに DELETE フラグを設定してファイルを開いている必要があります。 |
FileCaseSensitiveInformation (71) | FILE_CASE_SENSITIVE_INFORMATION 構造体で提供される情報を変更します。 呼び出し元は、DesiredAccess パラメーターに FILE_WRITE_ATTRIBUTES フラグを設定してファイルを開いている必要があります。 この値は、Windows 10 バージョン 1803 以降で使用できます。 |
FileLinkInformation (72) | FILE_LINK_INFORMATION 構造で指定されている既存のファイルへのハード リンクを作成します。 すべてのファイル システムがハード リンクをサポートしているわけではありません。たとえば、NTFS は FAT では実行されません。 |
FileCaseSensitiveInformationForceAccessCheck (75) | FILE_CASE_SENSITIVE_INFORMATION 構造体で提供される情報を変更します。 呼び出し元は、DesiredAccess パラメーターに FILE_WRITE_ATTRIBUTES フラグを設定してファイルを開いている必要があります。 これは FileCaseSensitiveInformation 操作の特別なバージョンです。これは、ユーザー モードの呼び出し元に適用されるチェックと同様に、IOManager でカーネル モード ドライバーのアクセス チェックを強制的に実行するために使用されます。 この操作は IOManager によってのみ認識され、ファイル システムは IOManager を受け取ることはありません。 この値は、Windows 10 バージョン 1803 以降で使用できます。 |
FileKnownFolderInformation (76) | FILE_KNOWN_FOLDER_INFORMATION 構造体。 Windows Server 2022 以降で使用できます。 |
戻り値
NtSetInformationFile は、STATUS_SUCCESSまたは適切なエラー状態を返します。
備考
NtSetInformationFile ファイルに関する情報を変更します。 特定のデバイスまたはファイル システムでサポートされていない FILE_XXX_INFORMATION 構造体のメンバーは無視されます。
FileInformationClass を FileDispositionInformation に設定した場合は、その後、FileHandle を NtCloseをできますが、他の ZwXxxFile ルーチンには渡すことができません。 FileDispositionInformation によってファイルが削除対象としてマークされるため、ハンドルを閉じる以外の後続の操作を試行するのはプログラミング エラーです。
FileInformationClass を FilePositionInformation に設定し、前の ntCreateFile 呼び出しで CreateOptions パラメーターに FILE_NO_INTERMEDIATE_BUFFERING フラグを含める場合、FILE_POSITION_INFORMATION 構造体の CurrentByteOffset メンバーに対する特定の制限が適用されます。 詳細については、「NtCreateFile」を参照してください。
FileInformationClass を FileEndOfFileInformation に設定し、FILE_END_OF_FILE_INFORMATION の EndOfFile メンバーが現在のファイルの末尾を超えるオフセットを指定する場合は、NtSetInformationFile ファイルを拡張し、拡張子をゼロで埋め込みます。
ファイルの操作の詳細については、「ドライバー でのファイルの使用」を参照してください。
NtSetInformationFile の呼び出し元は、IRQL = PASSIVE_LEVEL で実行され、特殊なカーネル API が有効になっている 必要があります。
手記
この関数の呼び出しがユーザー モードで発生する場合は、"ZwSetInformationFile" ではなく"NtSetInformationFile" という名前を使用します。
カーネル モード ドライバーからの呼び出しの場合、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 |
関連項目
CreateIoCompletionPortの
FILE_IO_PRIORITY_HINT_INFORMATION