...die lokale/remote/Active Directory system group policy ändern?

Autor: Kingron
Homepage: http://kingron.delphibbs.com

Kategorie: System

{
  For win2k, xp or higher
}

uses ComObj, ActiveX, Registry;

const
  
GPO_OPEN_LOAD_REGISTRY = $00000001;  // Load the registry files
  {$EXTERNALSYM GPO_OPEN_LOAD_REGISTRY}
  
GPO_OPEN_READ_ONLY = $00000002;  // Open the GPO as read only

  
GPO_SECTION_ROOT = 0;  // Root
  {$EXTERNALSYM GPO_SECTION_ROOT}
  
GPO_SECTION_USER = 1;  // User
  {$EXTERNALSYM GPO_SECTION_USER}
  
GPO_SECTION_MACHINE = 2;  // Machine

const
  
IID_GPO: TGUID = '{EA502722-A23D-11d1-A7D3-0000F87571E3}';

type
  
HPROPSHEETPAGE = Pointer;
  {$EXTERNALSYM HPROPSHEETPAGE}
  
PHPROPSHEETPAGE = ^HPROPSHEETPAGE;
  LPOLESTR        = POleStr;
  _GROUP_POLICY_OBJECT_TYPE = (GPOTypeLocal,
    // GPO on the local machine
    
GPOTypeRemote,                        // GPO on a remote machine
    
GPOTypeDS);                           // GPO in the Active Directory
  {$EXTERNALSYM _GROUP_POLICY_OBJECT_TYPE}
  
GROUP_POLICY_OBJECT_TYPE = _GROUP_POLICY_OBJECT_TYPE;

  IGroupPolicyObject = interface(IUnknown)
    ['{EA502723-A23D-11d1-A7D3-0000F87571E3}']

    function New(pszDomainName, pszDisplayName: LPOLESTR; dwFlags: DWORD): HRESULT;
      stdcall;
    function OpenDSGPO(pszPath: LPOLESTR; dwFlags: DWORD): HRESULT; stdcall;
    function OpenLocalMachineGPO(dwFlags: DWORD): HRESULT; stdcall;
    function OpenRemoteMachineGPO(pszComputerName: LPOLESTR; dwFlags: DWORD): HRESULT;
      stdcall;
    function Save(bMachine, bAdd: BOOL; const pGuidExtension, pGuid: TGUID): HRESULT;
      stdcall;
    function Delete: HRESULT; stdcall;
    function GetName(pszName: LPOLESTR; cchMaxLength: Integer): HRESULT; stdcall;
    function GetDisplayName(pszName: LPOLESTR; cchMaxLength: Integer): HRESULT; stdcall;
    function SetDisplayName(pszName: LPOLESTR): HRESULT; stdcall;
    function GetPath(pszPath: LPOLESTR; cchMaxPath: Integer): HRESULT; stdcall;
    function GetDSPath(dwSection: DWORD; pszPath: LPOLESTR; cchMaxPath: Integer): HRESULT;
      stdcall;
    function GetFileSysPath(dwSection: DWORD; pszPath: LPOLESTR;
      cchMaxPath: Integer): HRESULT; stdcall;

    //
    // Returns a registry key handle for the requested section.  The returned
    // key is the root of the registry, not the Policies subkey.  To set / read
    // a value in the Policies subkey, you will need to call RegOpenKeyEx to
    // open Software\Policies subkey first.
    //
    // The handle has been opened with ALL ACCESS rights.  Call RegCloseKey
    // on the handle when finished.
    //
    // If the GPO was loaded / created without the registry being loaded
    // this method will return E_FAIL.
    //
    // dwSection is either GPO_SECTION_USER or GPO_SECTION_MACHINE
    // hKey contains the registry key on return
    //

    
function GetRegistryKey(dwSection: DWORD; var hKey: HKEY): HRESULT; stdcall;
    function GetOptions(var dwOptions: DWORD): HRESULT; stdcall;
    function SetOptions(dwOptions, dwMask: DWORD): HRESULT; stdcall;
    function GetType(var gpoType: GROUP_POLICY_OBJECT_TYPE): HRESULT; stdcall;
    function GetMachineName(pszName: LPOLESTR; cchMaxLength: Integer): HRESULT; stdcall;
    function GetPropertySheetPages(var hPages: PHPROPSHEETPAGE;
      var uPageCount: UINT): HRESULT; stdcall;
  end;

const
  
REGISTRY_EXTENSION_GUID: TGUID = (D1: $35378EAC; D2: $683F; D3: $11D2;
    D4: ($A8, $9A, $00, $C0, $4F, $BB, $CF, $A2));
  CLSID_GPESnapIn: TGUID = (D1: $8fc0b734; D2: $a0e1; D3: $11d1;
    D4: ($a7, $d3, $0, $0, $f8, $75, $71, $e3));

procedure TForm1.Button1Click(Sender: TObject);
var
  
GPO: IGroupPolicyObject;
  Key: HKEY;
begin
  
GPO := CreateComObject(IID_GPO) as IGroupPolicyObject;
  if GPO.OpenLocalMachineGPO(GPO_OPEN_LOAD_REGISTRY) = S_OK then
  begin
    if 
GPO.GetRegistryKey(GPO_SECTION_USER, Key) = S_OK then
      with 
TRegistry.Create do
        try
          
RootKey := HKEY_CURRENT_USER;
          if OpenKey('Software\Microsoft\Windows\CurrentVersion\Policies\Explorer', True) then
          begin
            
WriteInteger('StartMenuLogOff', 0);
          end;

          RootKey := Key;
          if OpenKey('\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer', True) then
          begin
            
WriteInteger('StartMenuLogOff', 0);
          end;
          RegCloseKey(Key);
          GPO.Save(False, True, REGISTRY_EXTENSION_GUID, CLSID_GPESnapIn);
        finally
          
Free;
        end;
    SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, Integer(PChar('Polices')), 0);
  end;
end;

 

printed from
www.swissdelphicenter.ch
developers knowledge base