我正在开发一个类似于自助服务终端的应用程序。应用程序启动后,它会创建一个新桌面,并使用一个键组合,我可以在桌面之间来回移动。
这个新创建的桌面需要具有有限的功能。为此,我使用了RegCreateKeyEx
和RegSetValueEx
函数来创建或修改任务管理器,更改密码的注册表项, 锁定,关闭,用户切换和注销。我已使用以下代码从HKEY_CURRENT_USER
和HKEY_LOCAL_MACHINE
两个位置停用了注销:
bool RegistryUtilities::changeSingleFeature(HKEY regKey, LPCWSTR subKey, DWORD value, LPCWSTR valueName)
{
bool resultOk = false;
HKEY hkey;
DWORD dwDisposition;
if (RegCreateKeyEx(regKey, subKey, 0, NULL, 0, KEY_WRITE, NULL, &hkey, &dwDisposition) == ERROR_SUCCESS) {
if (RegSetValueEx(hkey, valueName, 0, REG_DWORD, (PBYTE)&value, sizeof(DWORD)) == ERROR_SUCCESS){
resultOk = true;
}
RegCloseKey(hkey);
}
return resultOk;
}
bool RegistryUtilities::changeAllFeatures(DWORD value)
{
bool resultOk = true;
/// Task Manager
HKEY regKey = HKEY_CURRENT_USER;
LPCWSTR subKey = L"Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System";
LPCWSTR valueName = L"DisableTaskMgr";
if (changeSingleFeature(regKey, subKey, value, valueName) == false)
resultOk = false;
/// Change Password
valueName = L"DisableChangePassword";
if (changeSingleFeature(regKey, subKey, value, valueName) == false)
resultOk = false;
/// Lock
valueName = L"DisableLockWorkstation";
if (changeSingleFeature(regKey, subKey, value, valueName) == false)
resultOk = false;
/// Log Off
subKey = L"Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer";
valueName = L"NoLogOff";
if (changeSingleFeature(regKey, subKey, value, valueName) == false)
resultOk = false;
/// Shut Down
valueName = L"NoClose";
if (changeSingleFeature(regKey, subKey, value, valueName) == false)
resultOk = false;
/// User Switching
regKey = HKEY_LOCAL_MACHINE;
subKey = L"Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System";
valueName = L"HideFastUserSwitching";
if (changeSingleFeature(regKey, subKey, value, valueName) == false)
resultOk = false;
return resultOk;
}
即使禁用所有这些选项,开始菜单上的“注销”选项仍然可见并且正常工作。在 CTRL + ALT + DEL 菜单中,一切都被禁用,只有一个取消选项存在,正如我想要的那样。
好奇心,在changeAllFeatures
函数中我改变了调用changeSingleFeature
的顺序,从调用注销选项开始,我不是惊讶地发现,在 CTRL + ALT + DEL 菜单中,所有内容仍然处于禁用状态,但在“开始”菜单中,注销已禁用,但每个其他选项都被禁用(关机,切换用户,锁定等已启用并正常工作。
是否可以禁用所有这些选项,包括注销?
答案 0 :(得分:0)
我已尝试过多种方法来做到这一点,我认为这是不可能的。我尝试过winapi代码(如帖子中所示),我尝试过直接注册表编辑(使用regedit)和组策略,但似乎没有任何效果。我已经得出结论(我的猜测,我不确定)这是Windows上的安全功能,因为如果您能够删除所有电源选项并登录/注销您无法正常关闭,例如,如果发生电源故障,您将无法访问您的电脑,通过桌面登录,因为这将被禁用