IStream::LockRegion メソッド (objidl.h)

LockRegion メソッドは、ストリーム内の指定されたバイト範囲へのアクセスを制限します。 一部のファイル システムでは提供されないため、この機能のサポートは省略可能です。

構文

HRESULT LockRegion(
  [in] ULARGE_INTEGER libOffset,
  [in] ULARGE_INTEGER cb,
  [in] DWORD          dwLockType
);

パラメーター

[in] libOffset

範囲の先頭のバイト オフセットを指定する整数。

[in] cb

制限する範囲の長さをバイト単位で指定する整数。

[in] dwLockType

範囲にアクセスする場合に要求される制限を指定します。

戻り値

このメソッドは、これらの値のいずれかを返すことができます。

リターン コード 説明
S_OK 指定したバイト範囲がロックされました。
E_PENDING 非同期ストレージのみ: ストリームのデータの一部またはすべてが現在使用できません。
STG_E_INVALIDFUNCTION ロックはまったくサポートされていないか、要求された特定の種類のロックがサポートされていません。
STG_E_LOCKVIOLATION 要求されたロックはサポートされていますが、既存のロックのため許可できません。
STG_E_REVERTED オブジェクトは、トランザクション ツリー内のオブジェクトの上にある元に戻す操作によって無効になっています。

注釈

ストリームのバイト範囲を拡張できます。 ストリームの拡張範囲をロックすることは、実際にストリームの一部であるデータを変更することなく、ストリームの異なるインスタンス間の通信方法として役立ちます。

3 種類のロックをサポートできます。他のライターを除外するためのロック、他のリーダーまたはライターを除外するためのロック、および 1 つのリクエスターのみが特定の範囲のロックを取得できるようにするロック (通常は他の 2 つのロックの種類の 1 つの別名です)。 特定のストリーム インスタンスは、最初の 2 つの型のいずれか、またはその両方をサポートする場合があります。 ロックの種類は、LOCKTYPE 列挙体の値を使用して dwLockType によって指定されます。

IStream::LockRegion でロックされているリージョンは、後で libOffsetcbdwLockType パラメーターとまったく同じ値で IStream::UnlockRegion を呼び出すことによって、明示的にロックを解除する必要があります。 ストリームが解放される前に、リージョンのロックを解除する必要があります。 隣接する 2 つのリージョンを個別にロックしてから、1 回のロック解除呼び出しでロックを解除することはできません。

呼び出し元へのメモ

サポートされているロックの種類は省略可能であり、 IStream の実装によって異なる場合があるため、STG_E_INVALIDFUNCTION エラーを処理するコードを指定する必要があります。

LockRegion メソッドは、複合ファイルの実装には影響しません。これは、この実装では範囲ロックがサポートされていないためです。

実装者へのメモ

このメソッドのサポートは、基になるファイル システムではサポートされない可能性があるため、ストリーム オブジェクトの実装では省略可能です。 サポートされているロックの種類も省略可能です。 要求された種類のロックがサポートされていない場合は、STG_E_INVALIDFUNCTION エラーが返されます。

要件

要件
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリ |UWP アプリ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリ |UWP アプリ]
対象プラットフォーム Windows
ヘッダー objidl.h
Library Uuid.lib
[DLL] Ole32.dll

こちらもご覧ください

IStream - 複合ファイルの実装

IStream::UnlockRegion

Locktype