次の方法で共有


ZwSetInformationFile 関数 (wdm.h)

ZwSetInformationFile ルーチンは、ファイル オブジェクトに関するさまざまな種類の情報を変更します。

構文

NTSYSAPI NTSTATUS ZwSetInformationFile(
  [in]  HANDLE                 FileHandle,
  [out] PIO_STATUS_BLOCK       IoStatusBlock,
  [in]  PVOID                  FileInformation,
  [in]  ULONG                  Length,
  [in]  FILE_INFORMATION_CLASS FileInformationClass
);

パラメーター

[in] FileHandle

ファイル オブジェクトへのハンドル。 このハンドルは、ZwCreateFile または ZwOpenFile正常に呼び出すことによって作成されます。

[out] IoStatusBlock

最終的な完了状態と要求された操作に関する情報を受け取る IO_STATUS_BLOCK 構造体へのポインター。 情報 メンバーは、ファイルに設定されたバイト数を受け取ります。

[in] FileInformation

ファイルに設定する情報を含むバッファーへのポインター。 このバッファー内の特定の構造体は、FileInformationClass パラメーターによって決定されます。 たとえば、FileInformationClass パラメーターが FileDispositionInformationEx 定数に設定されている場合、このパラメーターは FILE_DISPOSITION_INFORMATION_EX 構造体へのポインターである必要があります。

[in] Length

FileInformation バッファーのサイズ (バイト単位)。

[in] FileInformationClass

fileInformation が指すバッファーで指定された、ファイルに設定する情報の種類。 デバイス ドライバーと中間ドライバーは、次の FILE_INFORMATION_CLASS 値のいずれかを指定できます。

FileInformationClass 値の 意味
FileBasicInformation の FILE_BASIC_INFORMATION 構造体で提供される情報を変更します。 呼び出し元は、DesiredAccess パラメーターに FILE_WRITE_ATTRIBUTES フラグを設定してファイルを開いている必要があります。
FileDispositionInformation の ファイルが閉じられたときに削除を要求するか、以前に要求された削除を取り消します。 削除するか取り消すかの選択は、FILE_DISPOSITION_INFORMATION 構造体で指定されます。 呼び出し元は、DesiredAccess パラメーターに DELETE フラグを設定してファイルを開いている必要があります。
FileDispositionInformationEx ファイルの削除または以前に要求された削除の取り消しを要求します。 削除するか取り消すかの選択、および削除を実行するタイミングと方法の設定は、FILE_DISPOSITION_INFORMATION_EX 構造で指定されます。 呼び出し元は、DesiredAccess パラメーターに DELETE** フラグを設定してファイルを開いている必要があります。
FileEndOfFileInformation の FILE_END_OF_FILE_INFORMATION 構造体で提供されている現在のファイルの終わりの情報を変更します。 この操作では、ファイルを切り捨てたり拡張したりすることができます。 呼び出し元は、DesiredAccess パラメーターに FILE_WRITE_DATA フラグを設定してファイルを開いている必要があります。
FileIoPriorityHintInformation の ファイル ハンドルの現在の既定の IRP 優先度ヒントを変更します。 新しい値は、FILE_IO_PRIORITY_HINT_INFORMATION 構造体で指定されます。 この構造体は 8 バイトでアラインされている必要があります。
FileLinkInformation FILE_LINK_INFORMATION 構造で指定されている既存のファイルへのハード リンクを作成します。 すべてのファイル システムがハード リンクをサポートしているわけではありません。たとえば、NTFS は FAT では実行されません。
filePositionInformation の FILE_POSITION_INFORMATION 構造に格納されている現在のファイル情報を変更します。
FileRenameInformation FILE_RENAME_INFORMATION 構造体で指定されている現在のファイル名を変更します。 呼び出し元には、ファイルへの DELETE アクセス権が必要です。
FileShortNameInformation FILE_NAME_INFORMATION 構造体で指定されている現在の短いファイル名を変更します。 ファイルは NTFS ボリューム上にあり、呼び出し元は、DesiredAccess パラメーターに DesiredAccess DELETE フラグを設定してファイルを開いている必要があります。
FileIoCompletionNotificationInformation ファイル IO 完了通知フラグを変更します。 SetFileCompletionNotificationModesと同じフラグ サポートします。
FileValidDataLengthInformation の ファイルの現在の有効なデータ長を変更します。この長さは、FILE_VALID_DATA_LENGTH_INFORMATION 構造体で指定されます。 ファイルは NTFS ボリューム上にあり、呼び出し元は DesiredAccess パラメーターに FILE_WRITE_DATA フラグを設定してファイルを開いている必要があります。 管理者以外のユーザーとリモート ユーザーは、SeManageVolumePrivilege 特権を持っている必要があります。
FileReplaceCompletionInformation 指定したファイル ハンドルの I/O 完了ポートを変更または削除します。 呼び出し元は、ポート ハンドルと完了キーを指定する FILE_COMPLETION_INFORMATION 構造体へのポインターを提供します。 ポート ハンドルが NULL 以外の場合、このハンドルは、ファイル ハンドルに関連付ける新しい I/O 完了ポートを指定します。 ファイル ハンドルに関連付けられている I/O 完了ポートを削除するには、構造体のポート ハンドルを NULL に設定します。 ユーザー モードの呼び出し元は、ポート ハンドルを取得するために、CreateIoCompletionPort 関数を呼び出すことができます。

戻り値

ZwSetInformationFile は、STATUS_SUCCESSまたは適切なエラー状態を返します。

備考

ZwSetInformationFile は、ファイルに関する情報を変更します。 特定のデバイスまたはファイル システムでサポートされていない FILE_XXX_INFORMATION 構造体のメンバーは無視されます。

FileInformationClass fileDispositionInformationを に設定した場合、その後、FileHandle を ZwClose 渡すことができますが、他の ZwXxxFile ルーチンには渡すことができません。 FileDispositionInformation によってファイルが削除対象としてマークされるため、ハンドルを閉じる以外の後続の操作を試行するのはプログラミング エラーです。

FileInformationClass filePositionInformationを に設定し、ZwCreateFile の前の呼び出しで CreateOptions パラメーターに FILE_NO_INTERMEDIATE_BUFFERING フラグが含まれている場合、FILE_POSITION_INFORMATION 構造体の CurrentByteOffset メンバーに対する特定の制限が適用されます。 詳細については、「ZwCreateFileを参照してください。

FileInformationClass を FileEndOfFileInformationに設定し、FILE_END_OF_FILE_INFORMATIONEndOfFile メンバーが現在のファイルの末尾を超えるオフセットを指定する場合、ZwSetInformationFile はファイルを拡張し、拡張子をゼロで埋め込みます。

ファイルの操作の詳細については、「ドライバーでのファイルの使用 」を参照してください。

ZwSetInformationFile の呼び出し元は、IRQL = PASSIVE_LEVEL で実行され、特殊なカーネル API が有効になっている 必要があります。

この関数の呼び出しがユーザー モードで発生する場合は、"ZwSetInformationFile" ではなく"NtSetInformationFile" という名前を使用する必要があります。

カーネル モード ドライバーからの呼び出しの場合、Windows ネイティブ システム サービス ルーチンの NtXxx および ZwXxx バージョンは、入力パラメーターを処理および解釈する方法で動作が異なる場合があります。 ルーチンの NtXxxZwXxx バージョンの間の関係の詳細については、「ネイティブ システム サービス ルーチンの Nt および Zw バージョンの使用 を参照してください。

必要条件

要件 価値
ターゲット プラットフォーム の 万国
ヘッダー wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む)
ライブラリ NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL (「解説」セクションを参照)
DDI コンプライアンス規則 を する HwStorPortProhibitedDDIs(storport), PowerIrpDDis(wdm)

関連項目

CreateIoCompletionPort

FILE_BASIC_INFORMATION

FILE_COMPLETION_INFORMATION

FILE_DISPOSITION_INFORMATION

FILE_END_OF_FILE_INFORMATION

FILE_IO_PRIORITY_HINT_INFORMATION

FILE_LINK_INFORMATION

FILE_NAME_INFORMATION

FILE_POSITION_INFORMATION

FILE_RENAME_INFORMATION

FILE_VALID_DATA_LENGTH_INFORMATION

ネイティブ システム サービス ルーチンの Nt バージョンと Zw バージョンを使用した

ZwClose

ZwCreateFile

ZwOpenFile

ZwQueryInformationFile