次の方法で共有


IVdsLun::SetMask メソッド (vds.h)

[Windows 8とWindows Server 2012以降、仮想ディスク サービス COM インターフェイスは Windows Storage Management API に置き換えられます。

LUN へのアクセスを許可するコンピューターの一覧であるマスク解除リストを指定します。

構文

HRESULT SetMask(
  [in] LPWSTR pwszUnmaskingList
);

パラメーター

[in] pwszUnmaskingList

LUN へのアクセスを許可するコンピューターを指定する一覧。 リストは、セミコロンで区切られた NULL で終わる、人間が読み取り可能な文字列です。

値が "" の場合、ストレージ サブシステムに接続されている HBA ポートを持つすべてのコンピューターに LUN へのアクセス権が付与されます。

メモ 実際には、値が "" の場合、ほとんどのハードウェア プロバイダーは、ローカル コンピューター上のポートとイニシエーターにのみ LUN へのアクセスを許可します。

 

値が "" の場合、LUN へのアクセス権が以前に付与されたすべてのコンピューターのアクセス権が取り消されます。

"*" または "" が指定されている場合、他の値を指定することはできません。

ファイバー チャネル ネットワークとシリアル接続 SCSI (SAS) ネットワークの場合、各エントリは、LUN がマスク解除される各ポートの 64 ビットのワールドワイド名 (WWN) で、16 進数の文字列 (16 文字の長さ)、最上位バイトの先頭に書式設定されます。 たとえば、WWN アドレス 01:23:45:67:89:AB:CD:EF は "0123456789ABCDEF" として表されます。 詳細については、 ファイバー チャネルSAS の T10 仕様に関するページを参照してください。

iSCSI ネットワークの場合、各エントリは、LUN がマスク解除される各イニシエーターの iSCSI 修飾名 (IQN) です。 特定のイニシエーターにマスクされていない LUN は、そのイニシエーターに関連付けられていると見なされます。

メモ マスク解除リストには、同じ WWN または IQN を複数回含めることができます。 呼び出し元は、リストから重複を削除したり、WWN または iSCSI 名の形式を検証したりすることは想定されていません。 また、アクセスは累積的ではありません。 つまり、このメソッドを 2 回連続して呼び出すと、2 番目の呼び出しで指定されたコンピューターにのみアクセス権が付与されます。
 

戻り値

このメソッドは、E_INVALIDARGE_OUTOFMEMORYVDS 固有の戻り値など、標準の HRESULT 値を返すことができます。 また、HRESULT_FROM_WIN32 マクロを使用して、変換されたシステム エラー コードを返すこともできます。 エラーは、VDS 自体または使用されている基になる VDS プロバイダー から発生する可能性があります。 可能な戻り値は次のとおりです。

リターン コード/値 Description
VDS_E_PROVIDER_CACHE_CORRUPT
0x8004241FL
この戻り値は、配列に関する情報をキャッシュするプロバイダー内のソフトウェアまたは通信の問題を示します。 キャッシュを復元するには、 IVdsHwProvider::Reenumerate メソッドの後に IVdsHwProvider::Refresh メソッドを使用します。
VDS_E_OBJECT_DELETED
0x8004240BL
LUN オブジェクトが存在しなくなりました。
VDS_E_OBJECT_STATUS_FAILED
0x80042431L
LUN は失敗状態であり、要求された操作を実行できません。
VDS_E_ANOTHER_CALL_IN_PROGRESS
0x80042404L
別の操作が進行中です。この操作は、前の操作または操作が完了するまで続行できません。

注釈

SETMask メソッドを呼び出して LUN をマスクする前に、呼び出し元は対応するディスクを次のようにアンインストールする必要があります。 まず、 IVdsServiceUninstallDisk::GetDiskIdFrom LunInfo を呼び出して、マスクされている LUN に対応するディスクの VDS オブジェクト ID を取得します。 次に、ディスクの VDS オブジェクト ID を使用して IVdsServiceUninstallDisk::UninstallDisks を呼び出します。

Windows Server 2003 および Windows Server 2003 SP1: 対応するディスクをアンインストールするには、次の手順を実行します。 これらの手順は、Windows Server 2003 R2 では古くなったことに注意してください。

  1. マスクするディスク上のボリュームを次のように見つけます。
    1. ディスクごとに IVdsDisk::QueryExtents メソッドを呼び出して、ディスク エクステントを列挙します。 このメソッドは、 VDS_DISK_EXTENT 構造体の一覧を返します。 この構造体の volumeId メンバーには、ボリューム GUID が含まれています。
    2. IVdsSwProvider::QueryPacks メソッドを呼び出してパックを列挙し、IVdsPack::QueryVolumes を呼び出して各パックのボリュームを列挙することで、ソフトウェア プロバイダーによって管理されるボリュームを列挙します。 IVdsVolume::GetProperties を呼び出して、各ボリュームのVDS_VOLUME_PROP構造を取得します。 この構造体の id メンバーには、ボリューム GUID が含まれています。 pwszName メンバーには、ボリューム ハンドルを取得するために CreateFile に渡されるボリューム名が含まれています。
    3. IVdsDisk::QueryExtents を呼び出して取得したボリューム GUID を使用して、列挙ボリュームの一覧から必要なボリューム名を決定します。
  2. FSCTL_LOCK_VOLUMEコントロール コードを使用して各ボリューム ロックします。 LUN が無傷のボリュームとして別のマシンに移動され、別のアプリケーションがボリューム ロックを保持している場合は、可能であれば FSCTL_LOCK_VOLUME 操作を再試行してから、次の手順に進む必要があります。 ただし、ボリュームが削除されているためにロックおよびマウント解除されている場合は、 FSCTL_LOCK_VOLUME 操作を再試行する必要はありません。
    メモ この手順は省略可能です。 この手順の目的は、ロックを保持している可能性がある他のアプリケーションがそれらを解放できるようにすることです。 ロック操作が失敗した場合でも、次の手順に進む必要があります。
     
  3. FSCTL_DISMOUNT_VOLUMEコントロール コードを使用して、各ボリュームのマウントを解除します。
  4. ボリュームがベーシック ディスク上にある場合は、 IOCTL_VOLUME_OFFLINE コントロール コードを使用して、ボリュームをオフラインにします。
  5. InstallFunction パラメーターにDIF_REMOVEを渡して、SetupDiCallClassInstaller 関数を使用して各ボリュームをアンインストールします。
  6. InstallFunction パラメーターのDIF_REMOVEを渡して、SetupDiCallClassInstaller 関数を使用して各ディスクをアンインストールします。
  7. IVdsService::CleanupObsoleteMountPoints メソッドを呼び出して、マウントされたフォルダーやドライブ文字の割り当てなどのユーザー モード パスをレジストリから削除します。

LUN がターゲット マシンにマスク解除されるか、ターゲット マシンからマスクされた後、バスの再スキャンが実行されるまで、そのマシンでの LUN の可視性が変更されない可能性があります。 ターゲット マシン上の VDS アプリケーションは、 IVdsService::Reenumerate を呼び出してバスの再スキャンを開始します。 バスの再スキャンの開始は、ハードウェア プロバイダーではなく、VDS アプリケーションの責任です。

要件

要件
サポートされている最小のクライアント Windows Vista [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows Server 2003 (デスクトップ アプリのみ)
対象プラットフォーム Windows
ヘッダー vds.h
Library Uuid.lib

こちらもご覧ください

IVdsHwProvider::Reenumerate

IVdsHwProvider::Refresh

IVdsLun