加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何使用.NET应用Windows组策略?

发布时间:2020-12-15 08:47:24 所属栏目:百科 来源:网络整理
导读:是否可以使用.NET应用(和删除) Windows组策略设置? 我正在开发一个应用程序,需要暂时将机器置于受限制的,类似于kiosk的状态.我需要控制的一件事是访问USB驱动器,我相信我可以通过组策略来实现.我希望我的应用程序在启动时设置策略并在退出时还原更改…这是
是否可以使用.NET应用(和删除) Windows组策略设置?

我正在开发一个应用程序,需要暂时将机器置于受限制的,类似于kiosk的状态.我需要控制的一件事是访问USB驱动器,我相信我可以通过组策略来实现.我希望我的应用程序在启动时设置策略并在退出时还原更改…这是我可以通过.NET框架调用执行的操作吗?

这些是我的主要要求:

>启动控制台应用程序时应用组策略设置.
>确定策略拒绝用户操作的时间并记录它.

>可以登录系统安全日志.

>当我的应用停止时,还原我的政策更改.

解决方法

尝试使用 IGroupPolicyObject
bool SetGroupPolicy(HKEY hKey,LPCTSTR subKey,LPCTSTR valueName,DWORD dwType,const BYTE* szkeyValue,DWORD dwkeyValue)
{
    CoInitialize(NULL);
    HKEY ghKey,ghSubKey,hSubKey;
    LPDWORD flag = NULL;
    IGroupPolicyObject *pGPO = NULL;
    HRESULT hr = CoCreateInstance(CLSID_GroupPolicyObject,NULL,CLSCTX_ALL,IID_IGroupPolicyObject,(LPVOID*)&pGPO);

    if(!SUCCEEDED(hr))
    {
        MessageBox(NULL,L"Failed to initialize GPO",L"",S_OK);
    }

    if (RegCreateKeyEx(hKey,subKey,REG_OPTION_NON_VOLATILE,KEY_WRITE,&hSubKey,flag) != ERROR_SUCCESS)
    {
        return false;
        CoUninitialize();
    }

    if(dwType == REG_SZ)
    {
        if(RegSetValueEx(hSubKey,valueName,dwType,szkeyValue,strlen((char*)szkeyValue) + 1) != ERROR_SUCCESS)
        {
            RegCloseKey(hSubKey);
            CoUninitialize();
            return false;
        }
    }

    else if(dwType == REG_DWORD)
    {
        if(RegSetValueEx(hSubKey,(BYTE*)&dwkeyValue,sizeof(dwkeyValue)) != ERROR_SUCCESS)
        {
            RegCloseKey(hSubKey);
            CoUninitialize();
            return false;
        }
    }

    if(!SUCCEEDED(hr))
    {
        MessageBox(NULL,S_OK);
        CoUninitialize();
        return false;
    }

    if(pGPO->OpenLocalMachineGPO(GPO_OPEN_LOAD_REGISTRY) != S_OK)
    {
        MessageBox(NULL,L"Failed to get the GPO mapping",S_OK);
        CoUninitialize();
        return false;
    }

    if(pGPO->GetRegistryKey(GPO_SECTION_USER,&ghKey) != S_OK)
    {
        MessageBox(NULL,L"Failed to get the root key",S_OK);
        CoUninitialize();
        return false;
    }

    if(RegCreateKeyEx(ghKey,&ghSubKey,flag) != ERROR_SUCCESS)
    {
        RegCloseKey(ghKey);
        MessageBox(NULL,L"Cannot create key",S_OK);
        CoUninitialize();
        return false;
    }

    if(dwType == REG_SZ)
    {
        if(RegSetValueEx(ghSubKey,strlen((char*)szkeyValue) + 1) != ERROR_SUCCESS)
        {
            RegCloseKey(ghKey);
            RegCloseKey(ghSubKey);
            MessageBox(NULL,L"Cannot create sub key",S_OK);
            CoUninitialize();
            return false;
        }
    }

    else if(dwType == REG_DWORD)
    {
        if(RegSetValueEx(ghSubKey,sizeof(dwkeyValue)) != ERROR_SUCCESS)
        {
            RegCloseKey(ghKey);
            RegCloseKey(ghSubKey);
            MessageBox(NULL,L"Cannot set value",S_OK);
            CoUninitialize();
            return false;
        }
    }

    if(pGPO->Save(false,true,const_cast<GUID*>(&EXTENSION_GUID),const_cast<GUID*>(&CLSID_GPESnapIn)) != S_OK)
    {
        RegCloseKey(ghKey);
        RegCloseKey(ghSubKey);
        MessageBox(NULL,L"Save failed",S_OK);
        CoUninitialize();
        return false;
    }

    pGPO->Release();
    RegCloseKey(ghKey);
    RegCloseKey(ghSubKey);
    CoUninitialize();
    return true;
}

你可以像这样调用这个函数..

// Remove the Log Off in start menu
SetGroupPolicy(HKEY_CURRENT_USER,L"SoftwareMicrosoftWindowsCurrentVersionPoliciesExplorer",L"StartMenuLogOff",REG_DWORD,1);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读