这里是 Windows 编程的新手,我正在查看为 Windows Server 2003 编写的代码,但在 Windows Server 2008 中失败。
该代码基本上执行以下操作:
调用 LookupPrivilageValue(NULL, _T("SeAuditPrivelage"), &luidSeAudit)); 获取 LUID 结构。
请注意,我会检查每个 API 调用的返回码,以确保没有遇到任何问题。
然后它调整 TOKEN_PRIVELAGES:
OpenProcessToken(...);
TOKEN_PRIVILEGES tp;
tp.PrivilegeCount = 1;
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
tp.Privileges[0].Luid = luidSeAudit;
AjustTokenPrivelages(tokenHandle, FALSE, &tp, 0, NULL, NULL);
CloseHandle(tokenHandle);
GetModuleFileName(NULL, pBuf, 260);
strPath = pBuf;
iRet = strPath.ReverseFind('\\');
strPath = strPath.Left(iRet);
CString strName = strPath;
strName += _T("\\");
strName += _T("MyTool.exe");
_tcscpy_s(pBuf, 260, strName);
AUTHZ_SOURCE_SCHEMA_REGISTRATION ar;
memset(&ar, 0, sizeof(ar));
ar.dwFlags = AUTHZ_ALLOW_MULTIPLE_SOURCE_INSTANCES;
ar.szEventSourceName = _T("MySim");
ar.szEventMessageFile = pBuf;
ar.szEventSourceXmlSchemaFile = NULL;
ar.szEventAccessStringsFile = pBuf;
ar.szExecutableImagePath = NULL;
然后我打电话
AuthzInstallSecurityEventSource(0, &ar);
这里也没有错误。
但是,当我打电话时:
if (!AuthzRegisterSecurityEventSource(0, _T("MySim"), &m_secEvProv)) {
....GetLastError()...;
return Error;
}
请注意,m_secEvProv 的类型为:AUTHZ_SECURITY_EVENT_PROVIDER_HANDLE。
我收到错误 1314:
ERROR_PRIVILEGE_NOT_HELD 1314 (0x522) 客户端未持有所需的权限。
那么为此,我需要采取哪些额外步骤才能在 2008 年获得这种特权?
谢谢