オブジェクトの名前空間
オブジェクト名前空間は、名前付きオブジェクトを未承認のアクセスから保護します。 プライベート名前空間を作成すると、アプリケーションとサービスがより安全な環境を構築できます。
プロセスでは、 CreatePrivateNamespace 関数を使用してプライベート名前空間を作成できます。 この関数では、名前空間内のオブジェクトを分離する方法を定義する 境界 を指定する必要があります。 作成操作を成功させるには、呼び出し元が指定された境界内にある必要があります。 境界を指定するには、 CreateBoundaryDescriptor 関数と AddSIDToBoundaryDescriptor 関数を 使用します。
CreatePrivateNamespace の lpAliasPrefix パラメーターは、名前空間の名前として機能します。 各名前空間は、名前と境界によって一意に識別されます。 システムは、異なる境界を指定する限り、同じ名前の複数のプライベート名前空間をサポートします。
プロセスが、管理者 SID と現在のセッション番号という 2 つの要素を含む境界を定義する名前空間 NS1 の作成を要求するとします。 指定したセッションの Administrator アカウントでプロセスが実行されている場合、名前空間が作成されます。 別のプロセスでは、 OpenPrivateNamespace 関数を使用してこの名前空間にアクセスできます。 このプロセスが最初のプロセスによって作成された名前空間を開く場合は、指定した名前と境界の両方が一致する必要があります。 プロセスは、 lpPrivateNamespaceAttributes パラメーターを使用して名前空間へのアクセスを制限しない限り、境界内にない場合でも既存の名前空間を開くことができます。
この名前空間で作成されるオブジェクトには、フォーム プレフィックス\objectname の名前があります。 プレフィックスは、CreatePrivateNamespace の lpAliasPrefix パラメーターで指定された名前空間名です。 たとえば、NS1 名前空間に MyEvent という名前のイベント オブジェクトを作成するには、lpName パラメーターを NS1\MyEvent に設定して CreateEvent 関数を呼び出します。
名前空間を作成したプロセスでは、 ClosePrivateNamespace 関数を使用して、名前空間へのハンドルを閉じます。 名前空間を作成したプロセスが終了すると、ハンドルも閉じられます。 名前空間ハンドルが閉じられた後、 OpenPrivateNamespace への後続の呼び出しは失敗しますが、名前空間内のオブジェクトに対するすべての操作は成功します。