ここでの Windows プログラミングは初めてで、Windows Server 2008 で失敗する Windows Server 2003 用に作成されたコードを見ています。
コードは基本的に次のことを行います。
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 年にそのような特権を取得するには、さらにどのような手順を踏む必要がありますか?
ありがとうございました