IGPEInformation
COM公式ドキュメント
IGPEInformation インターフェイスは、Microsoft 管理コンソール (MMC) の拡張スナップインがグループポリシー オブジェクト エディターと通信するためのメソッドを提供します。MMC の詳細については、Microsoft 管理コンソールを参照してください。
解説(Remarks)
グループポリシー オブジェクト エディターを使用せずに GPO を直接作成・変更するには、 IGroupPolicyObject インターフェイスのメソッドを参照してください。
メソッド 9
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
GetName メソッドは、GPO の一意の名前を取得します。この値は通常 GUID です。
| pszName | LPWSTR | out | GPO の名前を受け取ります。 |
| cchMaxLength | INT | in | pszName バッファーのサイズを文字数で指定します。 |
戻り値
メソッドが成功した場合、戻り値は S_OK です。それ以外の場合、Platform SDK のヘッダーファイル WinError.h で定義されている COM エラーコードのいずれかを返します。
解説(Remarks)
表示に適した GPO のフレンドリ名を取得するには、 GetDisplayName メソッドを呼び出します。
GetDisplayName メソッドは、GPO の表示名を取得します。(IGPEInformation.GetDisplayName)
| pszName | LPWSTR | out | GPO の表示名を受け取ります。 |
| cchMaxLength | INT | in | pszName バッファーのサイズを文字数で指定します。 |
戻り値
メソッドが成功した場合、戻り値は S_OK です。それ以外の場合、Platform SDK のヘッダーファイル WinError.h で定義されている COM エラーコードのいずれかを返します。
解説(Remarks)
GPO の一意の名前 (通常は GUID) を取得するには、 GetName メソッドを呼び出します。
GetRegistryKey メソッドは、GPO の指定されたセクションに対応するレジストリキーのルートへのハンドルを取得します。
| dwSection | DWORD | in | GPO のセクションを指定します。このパラメーターには次のいずれかの値を指定できます。 GPO_SECTION_USERユーザーセクション GPO_SECTION_MACHINEコンピューターセクション |
| hKey | HKEY* | inout | レジストリキーのハンドルを受け取ります。このハンドルはすべてのアクセス権で開かれます。詳細については、 Registry Key Security and Access Rights を参照してください。 |
戻り値
メソッドが成功した場合、戻り値は S_OK です。それ以外の場合、Platform SDK のヘッダーファイル WinError.h で定義されている COM エラーコードのいずれかを返します。レジストリ情報が読み込まれていない場合、このメソッドは E_FAIL を返します。
解説(Remarks)
このレジストリハンドルは、レジストリキーのルートへのハンドルです。Policies キー内の値を取得または設定するには、まず RegOpenKeyEx 関数を呼び出して Software\Policies キーを開いてください。
レジストリハンドルの使用が終わったら、 RegCloseKey 関数を呼び出してハンドルを閉じてください。
GetDSPath メソッドは、GPO の指定されたセクションの Active Directory パスを取得します。
| dwSection | DWORD | in | GPO のセクションを指定します。このパラメーターには次のいずれかの値を指定できます。 GPO_SECTION_ROOTルートセクション GPO_SECTION_USERユーザーセクション GPO_SECTION_MACHINEコンピューターセクション |
| pszPath | LPWSTR | out | 要求されたセクションのルートへの Active Directory パスを受け取ります。詳細については、以下の「解説」セクションを参照してください。 |
| cchMaxPath | INT | in | pszPath パラメーターのサイズを文字数で指定します。 |
戻り値
メソッドが成功した場合、戻り値は S_OK です。それ以外の場合、Platform SDK のヘッダーファイル WinError.h で定義されている COM エラーコードのいずれかを返します。
解説(Remarks)
コンピューターの GPO を指定して GetDSPath メソッドを呼び出した場合、メソッド自体は成功しますが、戻り時に pszPath パラメーターには空の文字列が格納されます。これは、コンピューターの GPO は Active Directory 上のストレージを持たず、ファイルシステム上のストレージのみを持つためです。
GPO の指定されたセクションのファイルシステムパスを取得するには、 GetFileSysPath メソッドを呼び出します。
GetFileSysPath メソッドは、GPO の指定されたセクションのファイルシステムパスを返します。パスは UNC 形式です。
| dwSection | DWORD | in | GPO のセクションを指定します。このパラメーターには次のいずれかの値を指定できます。 GPO_SECTION_ROOTルートセクション GPO_SECTION_USERユーザーセクション GPO_SECTION_MACHINEコンピューターセクション |
| pszPath | LPWSTR | out | ファイルシステムパスを受け取ります。 |
| cchMaxPath | INT | in | pszPath バッファーのサイズを文字数で指定します。 |
戻り値
メソッドが成功した場合、戻り値は S_OK です。それ以外の場合、Platform SDK のヘッダーファイル WinError.h で定義されている COM エラーコードのいずれかを返します。
解説(Remarks)
GPO の指定されたセクションの Active Directory パスを取得するには、 GetDSPath メソッドを呼び出します。
GetOptions メソッドは、ユーザーがグループポリシー オブジェクト エディターで選択したオプションを取得します。
| dwOptions | DWORD* | inout | ユーザーが選択したオプションを表すビットマスク値を受け取ります。現在、このパラメーターはゼロのみを返します。 |
戻り値
メソッドが成功した場合、戻り値は S_OK です。それ以外の場合、Platform SDK のヘッダーファイル WinError.h で定義されている COM エラーコードのいずれかを返します。
GetType メソッドは、編集中の GPO の種類情報を取得します。(IGPEInformation.GetType)
| gpoType | GROUP_POLICY_OBJECT_TYPE* | inout | GPO の種類を受け取ります。システムはこのパラメーターに次のいずれかの値を設定します。 GPOTypeLocalローカル GPOTypeRemoteリモート GPOTypeDSActive Directory |
戻り値
メソッドが成功した場合、戻り値は S_OK です。それ以外の場合、Platform SDK のヘッダーファイル WinError.h で定義されている COM エラーコードのいずれかを返します。
GetHint メソッドは、この GPO をリンクできる Active Directory オブジェクトの種類を取得します。
| gpHint | GROUP_POLICY_HINT_TYPE* | inout | ディレクトリサービスの種類を受け取ります。このパラメーターには次のいずれかの値が設定されます。 GPHintUnknownリンク情報は利用できません。 GPHintMachineオブジェクトはコンピューター (ローカルまたはリモート) にリンクできます。 GPHintSiteオブジェクトはサイトにリンクできます。 GPHintDomainオブジェクトはドメインにリンクできます。 GPHintOrganizationalUnitオブジェクトは組織単位 (OU) にリンクできます。 |
戻り値
メソッドが成功した場合、戻り値は S_OK です。それ以外の場合、Platform SDK のヘッダーファイル WinError.h で定義されている COM エラーコードのいずれかを返します。
解説(Remarks)
グループポリシー オブジェクト エディターは、どの Active Directory オブジェクトが特定の GPO にリンクされているかを判別できません。 GetHint メソッドは、ユーザーがグループポリシー オブジェクト エディターをどのように起動したかに基づいてリンク情報を提供します。エディターは次の方法で起動できます。
- Active Directory Manager の拡張として起動する。サイト、ドメイン、または組織単位に移動し、Group Policy を選択します。
- 特定のリンクを指定したスタンドアロンの MMC ツールとして起動する。
- 特定のリンクを指定しないスタンドアロンの MMC ツールとして起動する。
PolicyChanged メソッドは、ポリシー設定が変更されたことをグループポリシー オブジェクト エディターに通知します。
| bMachine | BOOL | in | コンピューターポリシーとユーザーポリシーのどちらが変更されたかを指定します。この値が TRUE の場合は コンピューターポリシーが変更されたことを示します。FALSE の場合はユーザーポリシーが変更されたことを示します。 |
| bAdd | BOOL | in | 追加操作か削除操作かを指定します。このパラメーターが FALSE の場合、 指定された拡張機能 pGuidExtension の最後のポリシー設定が削除されます。それ以外のすべての場合、 このパラメーターは TRUE です。 |
| pGuidExtension | GUID* | inout | ポリシーを処理するスナップイン拡張機能の GUID または一意の名前へのポインター。 GPO を .pol ファイルを処理するスナップインで処理する場合、このパラメーターには REGISTRY_EXTENSION_GUID 値を指定する必要があります。 |
| pGuidSnapin | GUID* | inout | このメソッドを呼び出すスナップイン拡張機能の GUID または一意の名前へのポインター。 |
戻り値
メソッドが成功した場合、戻り値は S_OK です。それ以外の場合、Platform SDK のヘッダーファイル WinError.h で定義されている COM エラーコードのいずれかを返します。
解説(Remarks)
拡張機能は、グループポリシー オブジェクトに変更を加えるたびにこのメソッドを呼び出す必要があります。MMC スナップインを 作成する際には、IComponentData インターフェイスを実装し、IComponentData::Notify メソッドを呼び出す必要があることに注意してください。IGPEInformation インターフェイスを取得するには、 IComponentData::Notify メソッドの event パラメーターに MMCN_EXPAND を、arg パラメーターに TRUE を設定します。その後、 QueryInterface を呼び出し、通常の QueryInterface 実装規則に従うことで IGPEInformation インターフェイスを取得できます。
たとえば、次のように呼び出してインターフェイスを取得できます。
lpDataObject->QueryInterface(IID_IGPEInformation, (LPVOID lpDataObject->*)&m_pGPTInformation);
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IGPEInformation "{8FC0B735-A0E1-11D1-A7D3-0000F87571E3}" #usecom global IGPEInformation IID_IGPEInformation "{}" #comfunc global IGPEInformation_GetName 3 var,int #comfunc global IGPEInformation_GetDisplayName 4 var,int #comfunc global IGPEInformation_GetRegistryKey 5 int,sptr #comfunc global IGPEInformation_GetDSPath 6 int,var,int #comfunc global IGPEInformation_GetFileSysPath 7 int,var,int #comfunc global IGPEInformation_GetOptions 8 var #comfunc global IGPEInformation_GetType 9 var #comfunc global IGPEInformation_GetHint 10 var #comfunc global IGPEInformation_PolicyChanged 11 int,int,var,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IGPEInformation "{8FC0B735-A0E1-11D1-A7D3-0000F87571E3}" #usecom global IGPEInformation IID_IGPEInformation "{}" #comfunc global IGPEInformation_GetName 3 sptr,int #comfunc global IGPEInformation_GetDisplayName 4 sptr,int #comfunc global IGPEInformation_GetRegistryKey 5 int,sptr #comfunc global IGPEInformation_GetDSPath 6 int,sptr,int #comfunc global IGPEInformation_GetFileSysPath 7 int,sptr,int #comfunc global IGPEInformation_GetOptions 8 sptr #comfunc global IGPEInformation_GetType 9 sptr #comfunc global IGPEInformation_GetHint 10 sptr #comfunc global IGPEInformation_PolicyChanged 11 int,int,sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。