The*_*ang 2 c++ windows qt qt5
我试图在Windows注册表中创建一个键,但我收到此错误:
5访问被拒绝.
代码片段如下:
HKEY hKey;
LPCTSTR sk = TEXT("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options\\notepad.exe"); //notepad.exe is the key I want to create
//note: if I change the first parameter to KEY_CURRENT_USER, the key will be created
LONG createResKey = RegCreateKeyEx(HKEY_LOCAL_MACHINE, sk, 0, NULL, REG_OPTION_BACKUP_RESTORE, KEY_ALL_ACCESS, NULL, &hKey, NULL);
if (createResKey == ERROR_SUCCESS) {
qDebug() << "Success creating key.";
}
else {
qDebug() << "Error creating key.";
showErrorText(createResKey);
}
Run Code Online (Sandbox Code Playgroud)
也许是因为我的程序没有管理员权限,我尽力在网上进行研究并试图获得管理员权限,但失败了.我现在很困惑如何解决这个问题.
编辑:我想要实现什么?
我试图阻止一些特定的应用程序从修改注册表开始.例如,如果我想阻止记事本,首先我必须创建一个"notepad.exe"键,然后为其设置一个字符串值"debugger"并将其值设置为"debugfile.exe".因此记事本将无法启动.
GUI工具包非常复杂,通常建议避免使用管理权限来运行它们,并且许多GUI工具包(有充分的理由)代码可以检测和禁用(或警告).在Linux上,这意味着你不应该以root身份运行GTK或Qt代码(如果你这样做,会发出一些警告,或者工具包可能会中止;对于Qt,请参阅此内容 ;对于GTK,请参阅此内容).
在实践中,你应该尝试有一些小程序(可能在命令行上,或作为一个守护进程)与管理权限,并有你的Qt程序启动(例如用QProcess)和/或与它通信(使用某种间进程通信),利用操作系统提供的进程隔离和多用户能力.
我想对操作系统的一些一般性理解应该会有所帮助.然后我建议阅读操作系统:三个简单的部分,以获得有关操作系统的更多信息.
详细信息 - 如何使用比Qt程序更多的权限启动某些程序 - 是特定于操作系统的(在Linux上,请阅读setuid).进程间通信工具也是特定于操作系统的(在Linux上,请参阅pipe(7),fifo(7),shm_overview(7),unix(7),sem_overview(7)等...并阅读一些Linux编程书,也许旧的ALP或更新的东西).如何在Windows上获得更多权限或进行进程间通信是一个非常不同的问题(与Qt无关).
因此,您需要深入了解WinAPI文档(可能在此处),以了解如何启动具有管理权限的守护程序或小程序以及如何与其进行进程间通信.我猜Windows有这样的设施,但它们没有包装在Qt中(也没有访问注册表),你需要编写Windows特定代码并了解有关WinAPI的更多信息.我无法帮助你,因为我不知道也从未使用过Windows.
| 归档时间: |
|
| 查看次数: |
734 次 |
| 最近记录: |