0

这里是 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 年获得这种特权?

谢谢

4

1 回答 1

0

本着回答我大部分问题的精神,这又是一个例子。

在 2008 年,您必须在组策略管理组件中做一些事情。

执行以下步骤:

开始->管理工具->组策略管理

打开你的 Forest->Domains->->Domain Controllers

右键单击条目并选择编辑

在此处输入图像描述

这将打开另一个窗口: 在此处输入图像描述

转到计算机配置->策略->Windows设置->安全设置->本地策略

然后如图所示编辑审核策略,或者至少修改审核对象访问并选中所有三个复选框:“定义这些策略设置”、“成功”和“失败”;单击确定按钮关闭对话框;

下面是用户权限分配。单击它,然后单击策略:生成安全审核。

在此处输入图像描述

添加您的域和用户名,在我的例子中是它的 UIDDEV\Administrator。这将是我的程序将在其下运行的用户。瞧!您有权修改安全日志。

在此处输入图像描述

于 2013-08-14T21:35:55.710 回答