经过无敌的提示.
给出正确代码.已帮助和我一样在这里碰到问题的朋友
#include <windows.h>
#include <stdio.h>
int EnablePrivilege(LPCTSTR lpszPrivilege,BOOL bEnable)
{
HANDLE hToken;
TOKEN_PRIVILEGES tp;
LUID luid;
if(!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES |
TOKEN_QUERY | TOKEN_READ,&hToken))
return 1;
//if(!LookupPrivilegeValue(NULL, lpszPrivilege, &luid))
// return 1;
if(!LookupPrivilegeValue(NULL,lpszPrivilege,&luid ) ) // receives LUID of privilege
return 2;
tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = luid;
tp.Privileges[0].Attributes = (bEnable) ? SE_PRIVILEGE_ENABLED : 0;
AdjustTokenPrivileges(hToken,FALSE,&tp,NULL,NULL,NULL);
CloseHandle(hToken);
return 0;
}
void ShowError(const LONG ErrorNo){
LPVOID lpMsgBuf;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
ErrorNo,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL
);
printf("ID:%d\n%s",ErrorNo,lpMsgBuf);
}
int main(){
EnablePrivilege(SE_BACKUP_NAME,TRUE);
HKEY hKey;
RegOpenKeyEx( HKEY_CLASSES_ROOT,
"WScript.Network",
0, KEY_WRITE, &hKey );
LONG result;
result=RegSaveKey(hKey,"d:\\test.reg",NULL);
ShowError(result);
RegCloseKey( hKey );
return 0;
}