IVdsLun::SetMask メソッド (vdshwprv.h)
[Windows 8とWindows Server 2012以降、Virtual Disk Service COM インターフェイスは Windows Storage Management API に置き換えられます。
LUN へのアクセスを許可するコンピューターの一覧であるマスク解除リストを指定します。
HRESULT SetMask(
[in] LPWSTR pwszUnmaskingList
);
[in] pwszUnmaskingList
LUN へのアクセスを許可するコンピューターを指定する一覧。 リストは、セミコロンで区切られた NULL で終わる人間が読み取り可能な文字列です。
値が "" の場合、ストレージ サブシステムに HBA ポートが接続されているすべてのコンピューターに 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 は、そのイニシエーターに関連付けられていると見なされます。
このメソッドは、E_INVALIDARGやE_OUTOFMEMORYなどの標準の HRESULT値と、VDS 固有の戻り値を返すことができます。 また、HRESULT_FROM_WIN32 マクロを使用して、変換されたシステム エラー コードを返すこともできます。 エラーは、VDS 自体または使用されている基になる VDS プロバイダー から発生する可能性があります。 可能な戻り値は次のとおりです。
リターン コード/値 | Description |
---|---|
|
この戻り値は、配列に関する情報をキャッシュするプロバイダー内のソフトウェアまたは通信の問題を通知します。 キャッシュを復元するには、 IVdsHwProvider::Reenumerate メソッドの後に IVdsHwProvider::Refresh メソッドを使用します。 |
|
LUN オブジェクトが存在しなくなりました。 |
|
LUN が失敗状態であり、要求された操作を実行できません。 |
|
別の操作が進行中です。この操作は、前の操作または操作が完了するまで続行できません。 |
SETMask メソッドを呼び出して LUN をマスクする前に、呼び出し元は対応するディスクを次のようにアンインストールする必要があります。 まず、 IVdsServiceUninstallDisk::GetDiskIdFrom LunInfo を呼び出して、マスクされている LUN に対応するディスクの VDS オブジェクト ID を取得します。 次に、ディスクの VDS オブジェクト ID を使用して IVdsServiceUninstallDisk::UninstallDisks を呼び出します。
Windows Server 2003 および Windows Server 2003 SP1: 対応するディスクをアンインストールするには、次の手順を実行します。 これらの手順は、Windows Server 2003 R2 で廃止されました。
- マスクするディスク上のボリュームを次のように見つけます。
- ディスクごとに IVdsDisk::QueryExtents メソッドを呼び出して、ディスクエクステントを列挙します。 このメソッドは、 VDS_DISK_EXTENT 構造体の一覧を返します。 この構造体の volumeId メンバーには、ボリューム GUID が含まれています。
- ソフトウェア プロバイダーによって管理されるボリュームを列挙するには、 IVdsSwProvider::QueryPacks メソッドを呼び出してパックを列挙し、 IVdsPack::QueryVolumes を呼び出して各パック内のボリュームを列挙します。 IVdsVolume::GetProperties を呼び出して、各ボリュームのVDS_VOLUME_PROP構造を取得します。 この構造体の id メンバーには、ボリューム GUID が含まれています。 pwszName メンバーには、ボリューム ハンドルを取得するために CreateFile に渡されるボリューム名が含まれています。
- IVdsDisk::QueryExtents を呼び出して取得したボリューム GUID を使用して、列挙ボリュームの一覧から必要なボリューム名を決定します。
- FSCTL_LOCK_VOLUME制御コードを使用して各ボリューム を ロックします。 LUN が無傷のボリュームとして別のマシンに移動され、別のアプリケーションがボリューム ロックを保持している場合は、可能であれば 、次 の手順に進む前に、FSCTL_LOCK_VOLUME操作を再試行する必要があります。 ただし、ボリュームが削除されているためにロックされ、マウント解除されている場合は、 FSCTL_LOCK_VOLUME 操作を再試行する必要はありません。
メモ この手順は省略可能です。 この手順の目的は、ロックを保持している可能性がある他のアプリケーションがそれらを解放できるようにすることです。 ロック操作が失敗した場合でも、次の手順に進む必要があります。
- FSCTL_DISMOUNT_VOLUME制御コードを使用して、各ボリュームのマウントを解除します。
- ボリュームがベーシック ディスク上にある場合は、 IOCTL_VOLUME_OFFLINE コントロール コードを使用してボリュームをオフラインにします。
- InstallFunction パラメーターにDIF_REMOVEを渡して、SetupDiCallClassInstaller 関数を使用して各ボリュームをアンインストールします。
- InstallFunction パラメーターのDIF_REMOVEを渡して、SetupDiCallClassInstaller 関数を使用して各ディスクをアンインストールします。
- IVdsService::CleanupObsoleteMountPoints メソッドを呼び出して、マウントされたフォルダーやドライブ文字の割り当てなどのユーザー モード パスをレジストリから削除します。
LUN がターゲット マシンにマスク解除されるか、ターゲット マシンからマスクされた後、バスの再スキャンが実行されるまで、そのマシンでの LUN の可視性が変わる可能性があります。 ターゲット マシン上の VDS アプリケーションは、 IVdsService::Reenumerate を呼び出してバスの再スキャンを開始します。 バスの再スキャンの開始は、ハードウェア プロバイダーではなく、VDS アプリケーションの責任です。
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows Vista [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows Server 2003 (デスクトップ アプリのみ) |
対象プラットフォーム | Windows |
ヘッダー | vdshwprv.h |
Library | Uuid.lib |