IGroupPolicyObject
COM公式ドキュメント
IGroupPolicyObject インターフェイスは、グループポリシーオブジェクトエディターを使用せずに、GPO を直接作成および変更するためのメソッドを提供します。
解説(Remarks)
Microsoft 管理コンソール (MMC) の拡張スナップインがグループポリシーオブジェクトエディターと通信するために使用できるメソッドについては、 IGPEInformation インターフェイスを参照してください。
メソッド 18
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
New メソッドは、指定された表示名を持つ新しい GPO を Active Directory に作成します。このメソッドは OpenDSGPO メソッドを使用して GPO を開きます。
| pszDomainName | LPWSTR | in | 作成するオブジェクトの Active Directory パスを指定します。パスがドメインコントローラーを指定している場合、GPO はその DC 上に作成されます。それ以外の場合、システムが呼び出し元に代わって DC を選択します。 |
| pszDisplayName | LPWSTR | inoptional | 作成するオブジェクトの表示名を指定します。 |
| dwFlags | DWORD | in | GPO のレジストリ情報を読み込むかどうかを指定します。このパラメーターには次のいずれかの値を指定できます。 GPO_OPEN_LOAD_REGISTRYレジストリ情報を読み込みます。 GPO_OPEN_READ_ONLYGPO を読み取り専用モードで開きます。 |
戻り値
メソッドが成功した場合、戻り値は S_OK です。それ以外の場合、Platform SDK のヘッダーファイル WinError.h で定義されている COM エラーコードのいずれかを返します。
解説(Remarks)
既存の GPO を開くには、 OpenDSGPO メソッドを呼び出します。
OpenDSGPO メソッドは、指定された GPO を開き、必要に応じてレジストリ情報を読み込みます。
| pszPath | LPWSTR | in | 開くオブジェクトの Active Directory パスを指定します。パスがドメインコントローラーを指定している場合、GPO はその DC 上に作成されます。それ以外の場合、システムが呼び出し元に代わって DC を選択します。 |
| dwFlags | GPO_OPEN_FLAGS | in | GPO のレジストリ情報を読み込むかどうかを指定します。このパラメーターには次のいずれかの値を指定できます。 GPO_OPEN_LOAD_REGISTRYレジストリ情報を読み込みます。 GPO_OPEN_READ_ONLYGPO を読み取り専用モードで開きます。 |
戻り値
メソッドが成功した場合、戻り値は S_OK です。それ以外の場合、Platform SDK のヘッダーファイル WinError.h で定義されている COM エラーコードのいずれかを返します。
解説(Remarks)
Active Directory に新しい GPO を作成するには、 New メソッドを呼び出します。
OpenLocalMachineGPO メソッドは、コンピューターの既定の GPO を開き、必要に応じてレジストリ情報を読み込みます。
| dwFlags | GPO_OPEN_FLAGS | in | GPO のレジストリ情報を読み込むかどうかを指定します。このパラメーターには次のいずれかの値を指定できます。 GPO_OPEN_LOAD_REGISTRYレジストリ情報を読み込みます。 GPO_OPEN_READ_ONLYGPO を読み取り専用モードで開きます。 |
戻り値
メソッドが成功した場合、戻り値は S_OK です。それ以外の場合、Platform SDK のヘッダーファイル WinError.h で定義されている COM エラーコードのいずれかを返します。
解説(Remarks)
リモートコンピューターの既定の GPO を開くには、 OpenRemoteMachineGPO メソッドを呼び出します。
OpenRemoteMachineGPO メソッドは、指定されたリモートコンピューターの既定の GPO を開き、必要に応じてレジストリ情報を読み込みます。
| pszComputerName | LPWSTR | in | コンピューター名を指定します。名前の形式は \\ComputerName です。 |
| dwFlags | GPO_OPEN_FLAGS | in | GPO のレジストリ情報を読み込むかどうかを指定します。このパラメーターには次のいずれかの値を指定できます。 GPO_OPEN_LOAD_REGISTRYレジストリ情報を読み込みます。 GPO_OPEN_READ_ONLYGPO を読み取り専用モードで開きます。 |
戻り値
メソッドが成功した場合、戻り値は S_OK です。それ以外の場合、Platform SDK のヘッダーファイル WinError.h で定義されている COM エラーコードのいずれかを返します。
解説(Remarks)
リモート GPO のコンピューター名を取得するには、 GetMachineName メソッドを呼び出します。ローカルコンピューターの既定の GPO を開くには、 OpenLocalMachineGPO を呼び出してください。
Save メソッドは、指定されたレジストリポリシー設定をディスクに保存し、GPO のリビジョン番号を更新します。
| bMachine | BOOL | in | 保存するレジストリポリシー設定を指定します。このパラメーターが TRUE の場合、コンピューターのポリシー設定が保存されます。それ以外の場合は、ユーザーのポリシー設定が保存されます。 |
| bAdd | BOOL | in | 追加操作か削除操作かを指定します。このパラメーターが FALSE の場合、指定された拡張機能 pGuidExtension の最後のポリシー設定が削除されます。それ以外のすべての場合、このパラメーターは TRUE です。 |
| pGuidExtension | GUID* | inout | ポリシーを処理するスナップイン拡張機能の GUID または一意の名前を指定します。GPO を .pol ファイルを処理するスナップインで処理する場合は、REGISTRY_EXTENSION_GUID の値を指定する必要があります。 |
| pGuid | GUID* | inout | このポリシーの編集に使用される MMC スナップインを識別する GUID を指定します。スナップインは Microsoft 製のものでも、サードパーティ製のものでもかまいません。 |
戻り値
メソッドが成功した場合、戻り値は S_OK です。それ以外の場合、Platform SDK のヘッダーファイル WinError.h で定義されている COM エラーコードのいずれかを返します。
解説(Remarks)
Delete メソッドは GPO を削除します。
戻り値
関数が成功した場合、戻り値は S_OK です。それ以外の場合、Platform SDK のヘッダーファイル WinError.h で定義されている COM エラーコードのいずれかを返します。
解説(Remarks)
このメソッドを呼び出した後は、GPO のすべてのデータが削除されているため、 IGroupPolicyObject インターフェイスの他のメソッドを呼び出すことはできません。
GetName メソッドは、GPO の一意の名前を取得します。
| pszName | LPWSTR | out | GPO 名を受け取るバッファーへのポインター。 |
| cchMaxLength | INT | in | pszName バッファーのサイズを文字数で指定します。 |
戻り値
メソッドが成功した場合、戻り値は S_OK です。それ以外の場合、Platform SDK のヘッダーファイル WinError.h で定義されている COM エラーコードのいずれかを返します。
解説(Remarks)
GPO の表示名を取得するには、 GetDisplayName メソッドを呼び出します。
GetDisplayName メソッドは、GPO の表示名を取得します。(IGroupPolicyObject.GetDisplayName)
| pszName | LPWSTR | out | 表示名を受け取るバッファーへのポインター。 |
| cchMaxLength | INT | in | pszName バッファーのサイズを文字数で指定します。 |
戻り値
メソッドが成功した場合、戻り値は S_OK です。それ以外の場合、Platform SDK のヘッダーファイル WinError.h で定義されている COM エラーコードのいずれかを返します。
解説(Remarks)
GPO の表示名を設定するには、 SetDisplayName メソッドを呼び出します。GPO の一意の名前 (Active Directory オブジェクトの場合は GUID) を取得するには、 GetName を呼び出してください。
SetDisplayName メソッドは、GPO の表示名を設定します。
| pszName | LPWSTR | in | 新しい表示名を指定します。 |
戻り値
メソッドが成功した場合、戻り値は S_OK です。それ以外の場合、Platform SDK のヘッダーファイル WinError.h で定義されている COM エラーコードのいずれかを返します。
解説(Remarks)
GPO の表示名を取得するには、 GetDisplayName メソッドを呼び出します。
GetPath メソッドは、GPO へのパスを取得します。
| pszPath | LPWSTR | out | パスを受け取るバッファーへのポインター。GPO が Active Directory オブジェクトの場合、パスは ADSI 名形式です。GPO がコンピューターオブジェクトの場合、このパラメーターはファイルシステムパスを受け取ります。 |
| cchMaxLength | INT | in | pszPath バッファーに格納できる最大文字数を指定します。 |
戻り値
メソッドが成功した場合、戻り値は S_OK です。それ以外の場合、Platform SDK のヘッダーファイル WinError.h で定義されている COM エラーコードのいずれかを返します。
GetDSPath メソッドは、指定された GPO セクションのルートへの Active Directory パスを取得します。
| dwSection | DWORD | in | GPO セクションを指定します。このパラメーターには次のいずれかの値を指定できます。 GPO_SECTION_ROOTルートセクション GPO_SECTION_USERユーザーセクション GPO_SECTION_MACHINEコンピューターセクション |
| pszPath | LPWSTR | out | ADSI 形式 (LDAP://cn=user, ou=users, dc=coname, dc=com) のパスを受け取るバッファーへのポインター。 |
| 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 メソッドを呼び出します。
GetRegistryKey メソッドは、指定された GPO セクションのレジストリキーのルートへのハンドルを取得します。
| dwSection | GPO_SECTION | in | GPO セクションを指定します。このパラメーターには次のいずれかの値を指定できます。 GPO_SECTION_ROOTルートセクション GPO_SECTION_MACHINEコンピューターセクション |
| hKey | HKEY* | inout | レジストリキーへのハンドルを受け取ります。このハンドルはすべてのアクセス権で開かれます。詳細については、 Registry Key Security and Access Rights を参照してください。 |
戻り値
メソッドが成功した場合、戻り値は S_OK です。それ以外の場合、Platform SDK のヘッダーファイル WinError.h で定義されている COM エラーコードのいずれかを返します。レジストリ情報が読み込まれていない場合、メソッドは E_FAIL を返します。
解説(Remarks)
レジストリハンドルは、レジストリキーのルートへのハンドルです。
Policies キー内の値を取得または設定するには、まず
RegOpenKey 関数を呼び出して Software
Policies キーを開いてください。
レジストリハンドルの使用が終わったら、 RegCloseKey 関数を呼び出してハンドルを閉じてください。
GetOptions メソッドは、GPO のオプションを取得します。
| dwOptions | GPO_OPTIONS* | inout | オプションを受け取ります。このパラメーターには次のオプションを 1 つ以上指定できます。 GPO_OPTION_DISABLE_USERGPO のユーザー部分が無効になっています。 GPO_OPTION_DISABLE_MACHINEGPO のコンピューター部分が無効になっています。 |
戻り値
メソッドが成功した場合、戻り値は S_OK です。それ以外の場合、Platform SDK のヘッダーファイル WinError.h で定義されている COM エラーコードのいずれかを返します。
解説(Remarks)
GPO のオプションを設定するには、 SetOptions メソッドを呼び出します。
SetOptions メソッドは、GPO のオプションを設定します。
| dwOptions | GPO_OPTIONS | in | 新しいオプション値を指定します。このパラメーターには次のオプションを 1 つ以上指定できます。詳細については、以下の解説セクションを参照してください。 GPO_OPTION_DISABLE_USERGPO のユーザー部分を無効にします。 GPO_OPTION_DISABLE_MACHINEGPO のコンピューター部分を無効にします。 |
| dwMask | DWORD | in | 変更するオプションを指定します。このパラメーターには次のオプションを 1 つ以上指定できます。詳細については、以下の解説セクションを参照してください。 GPO_OPTION_DISABLE_USERGPO のユーザー部分を無効にします。 GPO_OPTION_DISABLE_MACHINEGPO のコンピューター部分を無効にします。 |
戻り値
メソッドが成功した場合、戻り値は S_OK です。それ以外の場合、Platform SDK のヘッダーファイル WinError.h で定義されている COM エラーコードのいずれかを返します。
解説(Remarks)
SetOptions(GPO_OPTION_DISABLE_USER, GPO_OPTION_DISABLE_USER)
ユーザー部分を有効にし、コンピューター部分を無効にするには、 SetOptions メソッドを次のように呼び出します。
SetOptions(GPO_OPTION_DISABLE_MACHINE, GPO_OPTION_DISABLE_USER | GPO_OPTION_DISABLE_MACHINE)
GPO のオプションを取得するには、 GetOptions メソッドを呼び出します。
GetType メソッドは、編集中の GPO の型情報を取得します。(IGroupPolicyObject.GetType)
| gpoType | GROUP_POLICY_OBJECT_TYPE* | inout | GPO の型を受け取ります。システムはこのパラメーターに次のいずれかの値を設定します。 GPOTypeDSActive Directory GPOTypeLocalローカル GPOTypeRemoteリモート |
戻り値
メソッドが成功した場合、戻り値は S_OK です。それ以外の場合、Platform SDK のヘッダーファイル WinError.h で定義されている COM エラーコードのいずれかを返します。
GetMachineName メソッドは、リモート GPO のコンピューター名を取得します。これは OpenRemoteMachineGPO メソッドで指定された名前です。
| pszName | LPWSTR | out | コンピューター名を受け取るバッファーへのポインター。 |
| cchMaxLength | INT | in | pszName バッファーのサイズを文字数で指定します。 |
戻り値
メソッドが成功した場合、戻り値は S_OK です。それ以外の場合、Platform SDK のヘッダーファイル WinError.h で定義されている COM エラーコードのいずれかを返します。
GetPropertySheetPages メソッドは、GPO に関連付けられたプロパティシートページを取得します。
| hPages | HPROPSHEETPAGE** | inout | プロパティシートページの配列へのポインターのアドレス。 |
| uPageCount | DWORD* | inout | プロパティシート配列内のページ数を受け取ります。 |
戻り値
メソッドが成功した場合、戻り値は S_OK です。それ以外の場合、Platform SDK のヘッダーファイル WinError.h で定義されている COM エラーコードのいずれかを返します。
解説(Remarks)
このメソッドは、 LocalAlloc 関数を使用して配列のメモリを割り当てます。プロパティシートページの使用が終わったら、 LocalFree 関数を使用して配列を解放してください。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IGroupPolicyObject "{EA502723-A23D-11D1-A7D3-0000F87571E3}" #usecom global IGroupPolicyObject IID_IGroupPolicyObject "{EA502722-A23D-11D1-A7D3-0000F87571E3}" #comfunc global IGroupPolicyObject_New 3 wstr,wstr,int #comfunc global IGroupPolicyObject_OpenDSGPO 4 wstr,int #comfunc global IGroupPolicyObject_OpenLocalMachineGPO 5 int #comfunc global IGroupPolicyObject_OpenRemoteMachineGPO 6 wstr,int #comfunc global IGroupPolicyObject_Save 7 int,int,var,var #comfunc global IGroupPolicyObject_Delete 8 #comfunc global IGroupPolicyObject_GetName 9 var,int #comfunc global IGroupPolicyObject_GetDisplayName 10 var,int #comfunc global IGroupPolicyObject_SetDisplayName 11 wstr #comfunc global IGroupPolicyObject_GetPath 12 var,int #comfunc global IGroupPolicyObject_GetDSPath 13 int,var,int #comfunc global IGroupPolicyObject_GetFileSysPath 14 int,var,int #comfunc global IGroupPolicyObject_GetRegistryKey 15 int,sptr #comfunc global IGroupPolicyObject_GetOptions 16 var #comfunc global IGroupPolicyObject_SetOptions 17 int,int #comfunc global IGroupPolicyObject_GetType 18 var #comfunc global IGroupPolicyObject_GetMachineName 19 var,int #comfunc global IGroupPolicyObject_GetPropertySheetPages 20 sptr,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IGroupPolicyObject "{EA502723-A23D-11D1-A7D3-0000F87571E3}" #usecom global IGroupPolicyObject IID_IGroupPolicyObject "{EA502722-A23D-11D1-A7D3-0000F87571E3}" #comfunc global IGroupPolicyObject_New 3 wstr,wstr,int #comfunc global IGroupPolicyObject_OpenDSGPO 4 wstr,int #comfunc global IGroupPolicyObject_OpenLocalMachineGPO 5 int #comfunc global IGroupPolicyObject_OpenRemoteMachineGPO 6 wstr,int #comfunc global IGroupPolicyObject_Save 7 int,int,sptr,sptr #comfunc global IGroupPolicyObject_Delete 8 #comfunc global IGroupPolicyObject_GetName 9 sptr,int #comfunc global IGroupPolicyObject_GetDisplayName 10 sptr,int #comfunc global IGroupPolicyObject_SetDisplayName 11 wstr #comfunc global IGroupPolicyObject_GetPath 12 sptr,int #comfunc global IGroupPolicyObject_GetDSPath 13 int,sptr,int #comfunc global IGroupPolicyObject_GetFileSysPath 14 int,sptr,int #comfunc global IGroupPolicyObject_GetRegistryKey 15 int,sptr #comfunc global IGroupPolicyObject_GetOptions 16 sptr #comfunc global IGroupPolicyObject_SetOptions 17 int,int #comfunc global IGroupPolicyObject_GetType 18 sptr #comfunc global IGroupPolicyObject_GetMachineName 19 sptr,int #comfunc global IGroupPolicyObject_GetPropertySheetPages 20 sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。