現在のファイル位置の使用
ファイルを作成または開くと、I/O マネージャーにファイル ハンドルと関連付けられている現在のファイル位置ポインターを作成させることができます。 そうすると、現在のファイル位置にデータを読み書きできます。読み取りまたは書き込まれたバイト数に応じてI/O マネージャーは自動的に位置を更新します。
既定では、I/O マネージャーは現在のファイル位置ポインターを保持しません。 現在のファイル位置を正しくメイン維持するには、I/O マネージャーがファイル オブジェクトに対するすべての読み取りおよび書き込み操作を同期する必要があるため、この既定値は効率的です。
現在のファイル位置ポインターに関連付けられているハンドルを作成するには DesiredAccess パラメーターで SYNCHRONIZEアクセス権を、 ZwCreateFileまたは IoCreateFile、または ZwOpenFile または FILE_SYNCHRONOUS_IO_ALERT または FILE_SYNCHRONOUS_IO_NONALERT を CreateOptions または OpenOptions parameter に指定します。 FILE_APPEND_DATAアクセス権は同時に指定しないでください。
ZwReadFile と ZwWriteFile は、現在のファイル位置ポインターを自動的に更新して、操作対象のデータの直後を指すように設定されます。 たとえば、バイト オフセット 101 から 20 バイトを読み取ると、 ZwReadFile は現在のファイル位置を 121 に更新します。
ZwQueryInformationFile または ZwSetInformationFileをそれぞれ呼び出すことで、現在のファイルの位置を確認または変更できます。 どちらの場合も、 FileInformationClass パラメーターを FilePositionInformationに設定します。