HADOOP-11639. Clean up Windows native code compilation warnings related to Windows Secure Container Executor. Contributed by Remus Rusanu.
This commit is contained in:
parent
05499b1093
commit
3836ad6c0b
|
@ -1172,6 +1172,9 @@ Release 2.7.0 - UNRELEASED
|
||||||
HADOOP-11691. X86 build of libwinutils is broken.
|
HADOOP-11691. X86 build of libwinutils is broken.
|
||||||
(Kiran Kumar M R via cnauroth)
|
(Kiran Kumar M R via cnauroth)
|
||||||
|
|
||||||
|
HADOOP-11639. Clean up Windows native code compilation warnings related to
|
||||||
|
Windows Secure Container Executor. (Remus Rusanu via cnauroth)
|
||||||
|
|
||||||
Release 2.6.1 - UNRELEASED
|
Release 2.6.1 - UNRELEASED
|
||||||
|
|
||||||
INCOMPATIBLE CHANGES
|
INCOMPATIBLE CHANGES
|
||||||
|
|
|
@ -409,7 +409,7 @@ Java_org_apache_hadoop_yarn_server_nodemanager_WindowsSecureContainerExecutor_00
|
||||||
|
|
||||||
done:
|
done:
|
||||||
if (path) (*env)->ReleaseStringChars(env, jpath, path);
|
if (path) (*env)->ReleaseStringChars(env, jpath, path);
|
||||||
return hFile;
|
return (jlong) hFile;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,8 +28,6 @@ static ACCESS_MASK CLIENT_MASK = 1;
|
||||||
VOID ReportClientError(LPWSTR lpszLocation, DWORD dwError) {
|
VOID ReportClientError(LPWSTR lpszLocation, DWORD dwError) {
|
||||||
LPWSTR debugMsg = NULL;
|
LPWSTR debugMsg = NULL;
|
||||||
int len;
|
int len;
|
||||||
WCHAR hexError[32];
|
|
||||||
HRESULT hr;
|
|
||||||
|
|
||||||
if (IsDebuggerPresent()) {
|
if (IsDebuggerPresent()) {
|
||||||
len = FormatMessageW(
|
len = FormatMessageW(
|
||||||
|
@ -49,7 +47,6 @@ DWORD PrepareRpcBindingHandle(
|
||||||
DWORD dwError = EXIT_FAILURE;
|
DWORD dwError = EXIT_FAILURE;
|
||||||
RPC_STATUS status;
|
RPC_STATUS status;
|
||||||
LPWSTR lpszStringBinding = NULL;
|
LPWSTR lpszStringBinding = NULL;
|
||||||
ULONG ulCode;
|
|
||||||
RPC_SECURITY_QOS_V3 qos;
|
RPC_SECURITY_QOS_V3 qos;
|
||||||
SID_IDENTIFIER_AUTHORITY authNT = SECURITY_NT_AUTHORITY;
|
SID_IDENTIFIER_AUTHORITY authNT = SECURITY_NT_AUTHORITY;
|
||||||
BOOL rpcBindingInit = FALSE;
|
BOOL rpcBindingInit = FALSE;
|
||||||
|
@ -104,7 +101,7 @@ DWORD PrepareRpcBindingHandle(
|
||||||
RPC_C_AUTHN_WINNT, // AuthnSvc
|
RPC_C_AUTHN_WINNT, // AuthnSvc
|
||||||
NULL, // AuthnIdentity (self)
|
NULL, // AuthnIdentity (self)
|
||||||
RPC_C_AUTHZ_NONE, // AuthzSvc
|
RPC_C_AUTHZ_NONE, // AuthzSvc
|
||||||
&qos);
|
(RPC_SECURITY_QOS*) &qos);
|
||||||
if (RPC_S_OK != status) {
|
if (RPC_S_OK != status) {
|
||||||
ReportClientError(L"RpcBindingSetAuthInfoEx", status);
|
ReportClientError(L"RpcBindingSetAuthInfoEx", status);
|
||||||
dwError = status;
|
dwError = status;
|
||||||
|
@ -375,7 +372,7 @@ DWORD RpcCall_WinutilsCreateFile(
|
||||||
RpcEndExcept;
|
RpcEndExcept;
|
||||||
|
|
||||||
if (ERROR_SUCCESS == dwError) {
|
if (ERROR_SUCCESS == dwError) {
|
||||||
*hFile = response->hFile;
|
*hFile = (HANDLE) response->hFile;
|
||||||
}
|
}
|
||||||
|
|
||||||
done:
|
done:
|
||||||
|
@ -479,11 +476,11 @@ DWORD RpcCall_TaskCreateAsUser(
|
||||||
RpcEndExcept;
|
RpcEndExcept;
|
||||||
|
|
||||||
if (ERROR_SUCCESS == dwError) {
|
if (ERROR_SUCCESS == dwError) {
|
||||||
*phProcess = response->hProcess;
|
*phProcess = (HANDLE) response->hProcess;
|
||||||
*phThread = response->hThread;
|
*phThread = (HANDLE) response->hThread;
|
||||||
*phStdIn = response->hStdIn;
|
*phStdIn = (HANDLE) response->hStdIn;
|
||||||
*phStdOut = response->hStdOut;
|
*phStdOut = (HANDLE) response->hStdOut;
|
||||||
*phStdErr = response->hStdErr;
|
*phStdErr = (HANDLE) response->hStdErr;
|
||||||
}
|
}
|
||||||
|
|
||||||
done:
|
done:
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
#include "winutils.h"
|
#include "winutils.h"
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#import "msxml6.dll"
|
#import "msxml6.dll" exclude("ISequentialStream", "_FILETIME")
|
||||||
|
|
||||||
#define ERROR_CHECK_HRESULT_DONE(hr, message) \
|
#define ERROR_CHECK_HRESULT_DONE(hr, message) \
|
||||||
if (FAILED(hr)) { \
|
if (FAILED(hr)) { \
|
||||||
|
|
|
@ -248,8 +248,8 @@ DWORD BuildServiceSecurityDescriptor(
|
||||||
__out PSECURITY_DESCRIPTOR* pSD);
|
__out PSECURITY_DESCRIPTOR* pSD);
|
||||||
|
|
||||||
DWORD AddNodeManagerAndUserACEsToObject(
|
DWORD AddNodeManagerAndUserACEsToObject(
|
||||||
__in HANDLE hObject,
|
__in HANDLE hProcess,
|
||||||
__in LPWSTR user,
|
__in LPCWSTR user,
|
||||||
__in ACCESS_MASK accessMask);
|
__in ACCESS_MASK accessMask);
|
||||||
|
|
||||||
|
|
||||||
|
@ -283,15 +283,29 @@ DWORD RpcCall_WinutilsCreateFile(
|
||||||
__out HANDLE* hFile);
|
__out HANDLE* hFile);
|
||||||
|
|
||||||
DWORD RpcCall_WinutilsMoveFile(
|
DWORD RpcCall_WinutilsMoveFile(
|
||||||
__in LPCWSTR sourcePath,
|
__in int operation,
|
||||||
__in LPCWSTR destinationPath,
|
__in LPCWSTR sourcePath,
|
||||||
__in BOOL replaceExisting);
|
__in LPCWSTR destinationPath,
|
||||||
|
__in BOOL replaceExisting);
|
||||||
|
|
||||||
|
|
||||||
DWORD RpcCall_WinutilsDeletePath(
|
DWORD RpcCall_WinutilsDeletePath(
|
||||||
__in LPCWSTR path,
|
__in LPCWSTR path,
|
||||||
__in BOOL isDir,
|
__in BOOL isDir,
|
||||||
__out BOOL* pDeleted);
|
__out BOOL* pDeleted);
|
||||||
|
|
||||||
|
DWORD RpcCall_WinutilsChown(
|
||||||
|
__in LPCWSTR filePath,
|
||||||
|
__in_opt LPCWSTR ownerName,
|
||||||
|
__in_opt LPCWSTR groupName);
|
||||||
|
|
||||||
|
DWORD RpcCall_WinutilsMkDir(
|
||||||
|
__in LPCWSTR filePath);
|
||||||
|
|
||||||
|
DWORD RpcCall_WinutilsChmod(
|
||||||
|
__in LPCWSTR filePath,
|
||||||
|
__in int mode);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -2596,7 +2596,7 @@ LPCWSTR GetSystemTimeString() {
|
||||||
QueryPerformanceFrequency(&frequency);
|
QueryPerformanceFrequency(&frequency);
|
||||||
|
|
||||||
qpc = (double) counter.QuadPart / (double) frequency.QuadPart;
|
qpc = (double) counter.QuadPart / (double) frequency.QuadPart;
|
||||||
subSec = ((qpc - (long)qpc) * 1000000);
|
subSec = (int)((qpc - (long)qpc) * 1000000);
|
||||||
|
|
||||||
hr = StringCbPrintf(buffer, sizeof(buffer), L"%02d:%02d:%02d.%06d",
|
hr = StringCbPrintf(buffer, sizeof(buffer), L"%02d:%02d:%02d.%06d",
|
||||||
(int)systime.wHour, (int)systime.wMinute, (int)systime.wSecond, (int)subSec);
|
(int)systime.wHour, (int)systime.wMinute, (int)systime.wSecond, (int)subSec);
|
||||||
|
@ -2619,7 +2619,7 @@ done:
|
||||||
// Native debugger: windbg, ntsd, cdb, visual studio
|
// Native debugger: windbg, ntsd, cdb, visual studio
|
||||||
//
|
//
|
||||||
VOID LogDebugMessage(LPCWSTR format, ...) {
|
VOID LogDebugMessage(LPCWSTR format, ...) {
|
||||||
LPWSTR buffer[8192];
|
wchar_t buffer[8192];
|
||||||
va_list args;
|
va_list args;
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
|
|
||||||
|
@ -2657,8 +2657,8 @@ DWORD SplitStringIgnoreSpaceW(
|
||||||
size_t tokenCount = 0;
|
size_t tokenCount = 0;
|
||||||
size_t crtSource;
|
size_t crtSource;
|
||||||
size_t crtToken = 0;
|
size_t crtToken = 0;
|
||||||
WCHAR* lpwszTokenStart = NULL;
|
const WCHAR* lpwszTokenStart = NULL;
|
||||||
WCHAR* lpwszTokenEnd = NULL;
|
const WCHAR* lpwszTokenEnd = NULL;
|
||||||
WCHAR* lpwszBuffer = NULL;
|
WCHAR* lpwszBuffer = NULL;
|
||||||
size_t tokenLength = 0;
|
size_t tokenLength = 0;
|
||||||
size_t cchBufferLength = 0;
|
size_t cchBufferLength = 0;
|
||||||
|
@ -2849,7 +2849,7 @@ DWORD BuildServiceSecurityDescriptor(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pTokenGroup = (PTOKEN_USER) LocalAlloc(LPTR, dwBufferSize);
|
pTokenGroup = (PTOKEN_PRIMARY_GROUP) LocalAlloc(LPTR, dwBufferSize);
|
||||||
if (NULL == pTokenGroup) {
|
if (NULL == pTokenGroup) {
|
||||||
dwError = GetLastError();
|
dwError = GetLastError();
|
||||||
LogDebugMessage(L"LocalAlloc:pTokenGroup: %d\n", dwError);
|
LogDebugMessage(L"LocalAlloc:pTokenGroup: %d\n", dwError);
|
||||||
|
@ -2870,11 +2870,11 @@ DWORD BuildServiceSecurityDescriptor(
|
||||||
|
|
||||||
owner.TrusteeForm = TRUSTEE_IS_SID;
|
owner.TrusteeForm = TRUSTEE_IS_SID;
|
||||||
owner.TrusteeType = TRUSTEE_IS_UNKNOWN;
|
owner.TrusteeType = TRUSTEE_IS_UNKNOWN;
|
||||||
owner.ptstrName = (LPCWSTR) pOwner;
|
owner.ptstrName = (LPWSTR) pOwner;
|
||||||
|
|
||||||
group.TrusteeForm = TRUSTEE_IS_SID;
|
group.TrusteeForm = TRUSTEE_IS_SID;
|
||||||
group.TrusteeType = TRUSTEE_IS_UNKNOWN;
|
group.TrusteeType = TRUSTEE_IS_UNKNOWN;
|
||||||
group.ptstrName = (LPCWSTR) pTokenGroup->PrimaryGroup;
|
group.ptstrName = (LPWSTR) pTokenGroup->PrimaryGroup;
|
||||||
|
|
||||||
eas = (EXPLICIT_ACCESS*) LocalAlloc(LPTR, sizeof(EXPLICIT_ACCESS) * (grantSidCount + denySidCount));
|
eas = (EXPLICIT_ACCESS*) LocalAlloc(LPTR, sizeof(EXPLICIT_ACCESS) * (grantSidCount + denySidCount));
|
||||||
if (NULL == eas) {
|
if (NULL == eas) {
|
||||||
|
@ -2890,7 +2890,7 @@ DWORD BuildServiceSecurityDescriptor(
|
||||||
eas[crt].grfInheritance = NO_INHERITANCE;
|
eas[crt].grfInheritance = NO_INHERITANCE;
|
||||||
eas[crt].Trustee.TrusteeForm = TRUSTEE_IS_SID;
|
eas[crt].Trustee.TrusteeForm = TRUSTEE_IS_SID;
|
||||||
eas[crt].Trustee.TrusteeType = TRUSTEE_IS_UNKNOWN;
|
eas[crt].Trustee.TrusteeType = TRUSTEE_IS_UNKNOWN;
|
||||||
eas[crt].Trustee.ptstrName = (LPCWSTR) pGrantSids[crt];
|
eas[crt].Trustee.ptstrName = (LPWSTR) pGrantSids[crt];
|
||||||
eas[crt].Trustee.pMultipleTrustee = NULL;
|
eas[crt].Trustee.pMultipleTrustee = NULL;
|
||||||
eas[crt].Trustee.MultipleTrusteeOperation = NO_MULTIPLE_TRUSTEE;
|
eas[crt].Trustee.MultipleTrusteeOperation = NO_MULTIPLE_TRUSTEE;
|
||||||
}
|
}
|
||||||
|
@ -2902,7 +2902,7 @@ DWORD BuildServiceSecurityDescriptor(
|
||||||
eas[crt].grfInheritance = NO_INHERITANCE;
|
eas[crt].grfInheritance = NO_INHERITANCE;
|
||||||
eas[crt].Trustee.TrusteeForm = TRUSTEE_IS_SID;
|
eas[crt].Trustee.TrusteeForm = TRUSTEE_IS_SID;
|
||||||
eas[crt].Trustee.TrusteeType = TRUSTEE_IS_UNKNOWN;
|
eas[crt].Trustee.TrusteeType = TRUSTEE_IS_UNKNOWN;
|
||||||
eas[crt].Trustee.ptstrName = (LPCWSTR) pDenySids[crt - grantSidCount];
|
eas[crt].Trustee.ptstrName = (LPWSTR) pDenySids[crt - grantSidCount];
|
||||||
eas[crt].Trustee.pMultipleTrustee = NULL;
|
eas[crt].Trustee.pMultipleTrustee = NULL;
|
||||||
eas[crt].Trustee.MultipleTrusteeOperation = NO_MULTIPLE_TRUSTEE;
|
eas[crt].Trustee.MultipleTrusteeOperation = NO_MULTIPLE_TRUSTEE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -206,7 +206,7 @@ DWORD ValidateConfigurationFile() {
|
||||||
BOOL daclPresent = FALSE;
|
BOOL daclPresent = FALSE;
|
||||||
BOOL daclDefaulted = FALSE;
|
BOOL daclDefaulted = FALSE;
|
||||||
PACL pDacl = NULL;
|
PACL pDacl = NULL;
|
||||||
unsigned int crt = 0, crtSid = 0;
|
DWORD crt = 0;
|
||||||
WELL_KNOWN_SID_TYPE allowedSidTypes[] = {
|
WELL_KNOWN_SID_TYPE allowedSidTypes[] = {
|
||||||
WinLocalSystemSid,
|
WinLocalSystemSid,
|
||||||
WinBuiltinAdministratorsSid};
|
WinBuiltinAdministratorsSid};
|
||||||
|
@ -214,7 +214,6 @@ DWORD ValidateConfigurationFile() {
|
||||||
DWORD cbSid = SECURITY_MAX_SID_SIZE;
|
DWORD cbSid = SECURITY_MAX_SID_SIZE;
|
||||||
PSID* allowedSids = NULL;
|
PSID* allowedSids = NULL;
|
||||||
int cAllowedSids = 0;
|
int cAllowedSids = 0;
|
||||||
BOOL isSidDefaulted;
|
|
||||||
PSID sidOwner = NULL;
|
PSID sidOwner = NULL;
|
||||||
PSID sidGroup = NULL;
|
PSID sidGroup = NULL;
|
||||||
|
|
||||||
|
@ -324,7 +323,7 @@ DWORD InitJobName() {
|
||||||
int crt = 0;
|
int crt = 0;
|
||||||
|
|
||||||
// Services can be restarted
|
// Services can be restarted
|
||||||
if (gJobName) LocalFree(gJobName);
|
if (gJobName) LocalFree((HLOCAL)gJobName);
|
||||||
gJobName = NULL;
|
gJobName = NULL;
|
||||||
|
|
||||||
dwError = GetConfigValue(
|
dwError = GetConfigValue(
|
||||||
|
@ -382,7 +381,7 @@ DWORD InitLocalDirs() {
|
||||||
}
|
}
|
||||||
|
|
||||||
done:
|
done:
|
||||||
if (value) LocalFree(value);
|
if (value) LocalFree((HLOCAL)value);
|
||||||
|
|
||||||
return dwError;
|
return dwError;
|
||||||
}
|
}
|
||||||
|
@ -437,7 +436,7 @@ DWORD ValidateLocalPath(LPCWSTR lpszPath) {
|
||||||
gLocalDirs[crt], gCchLocalDir[crt],
|
gLocalDirs[crt], gCchLocalDir[crt],
|
||||||
NULL, // lpVersionInformation
|
NULL, // lpVersionInformation
|
||||||
NULL, // lpReserved
|
NULL, // lpReserved
|
||||||
NULL); // lParam
|
(LPARAM) NULL); // lParam
|
||||||
|
|
||||||
if (0 == compareResult) {
|
if (0 == compareResult) {
|
||||||
dwError = GetLastError();
|
dwError = GetLastError();
|
||||||
|
@ -500,7 +499,7 @@ done:
|
||||||
// Description:
|
// Description:
|
||||||
// Service main entry point.
|
// Service main entry point.
|
||||||
//
|
//
|
||||||
VOID WINAPI SvcMain() {
|
VOID WINAPI SvcMain(DWORD dwArg, LPTSTR* lpszArgv) {
|
||||||
DWORD dwError = ERROR_SUCCESS;
|
DWORD dwError = ERROR_SUCCESS;
|
||||||
|
|
||||||
gSvcStatusHandle = RegisterServiceCtrlHandler(
|
gSvcStatusHandle = RegisterServiceCtrlHandler(
|
||||||
|
@ -693,15 +692,15 @@ done:
|
||||||
//
|
//
|
||||||
DWORD AuthInit() {
|
DWORD AuthInit() {
|
||||||
DWORD dwError = ERROR_SUCCESS;
|
DWORD dwError = ERROR_SUCCESS;
|
||||||
int count = 0;
|
size_t count = 0;
|
||||||
int crt = 0;
|
size_t crt = 0;
|
||||||
size_t len = 0;
|
size_t len = 0;
|
||||||
LPCWSTR value = NULL;
|
LPCWSTR value = NULL;
|
||||||
WCHAR** tokens = NULL;
|
WCHAR** tokens = NULL;
|
||||||
LPWSTR lpszSD = NULL;
|
LPWSTR lpszSD = NULL;
|
||||||
ULONG cchSD = 0;
|
ULONG cchSD = 0;
|
||||||
DWORD dwBufferSize = 0;
|
DWORD dwBufferSize = 0;
|
||||||
int allowedCount = 0;
|
size_t allowedCount = 0;
|
||||||
PSID* allowedSids = NULL;
|
PSID* allowedSids = NULL;
|
||||||
|
|
||||||
|
|
||||||
|
@ -737,7 +736,7 @@ DWORD AuthInit() {
|
||||||
|
|
||||||
done:
|
done:
|
||||||
if (lpszSD) LocalFree(lpszSD);
|
if (lpszSD) LocalFree(lpszSD);
|
||||||
if (value) LocalFree(value);
|
if (value) LocalFree((HLOCAL)value);
|
||||||
if (tokens) LocalFree(tokens);
|
if (tokens) LocalFree(tokens);
|
||||||
return dwError;
|
return dwError;
|
||||||
}
|
}
|
||||||
|
@ -1167,11 +1166,12 @@ error_status_t WinutilsCreateProcessAsUser(
|
||||||
// Note that there are no more API calls, only assignments. A failure could occur only if
|
// Note that there are no more API calls, only assignments. A failure could occur only if
|
||||||
// foced (process kill) or hardware error (faulty memory, processort bit flip etc).
|
// foced (process kill) or hardware error (faulty memory, processort bit flip etc).
|
||||||
|
|
||||||
(*response)->hProcess = hDuplicateProcess;
|
// as MIDL has no 'HANDLE' type, the (LONG_PTR) is used instead
|
||||||
(*response)->hThread = hDuplicateThread;
|
(*response)->hProcess = (LONG_PTR)hDuplicateProcess;
|
||||||
(*response)->hStdIn = hDuplicateStdIn;
|
(*response)->hThread = (LONG_PTR)hDuplicateThread;
|
||||||
(*response)->hStdOut = hDuplicateStdOut;
|
(*response)->hStdIn = (LONG_PTR)hDuplicateStdIn;
|
||||||
(*response)->hStdErr = hDuplicateStdErr;
|
(*response)->hStdOut = (LONG_PTR)hDuplicateStdOut;
|
||||||
|
(*response)->hStdErr = (LONG_PTR)hDuplicateStdErr;
|
||||||
|
|
||||||
fMustCleanupProcess = FALSE;
|
fMustCleanupProcess = FALSE;
|
||||||
|
|
||||||
|
@ -1276,7 +1276,8 @@ error_status_t WinutilsCreateFile(
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
(*response)->hFile = hDuplicateFile;
|
// As MIDL has no 'HANDLE' type, (LONG_PTR) is used instead
|
||||||
|
(*response)->hFile = (LONG_PTR)hDuplicateFile;
|
||||||
hDuplicateFile = INVALID_HANDLE_VALUE;
|
hDuplicateFile = INVALID_HANDLE_VALUE;
|
||||||
|
|
||||||
done:
|
done:
|
||||||
|
@ -1302,7 +1303,6 @@ error_status_t WinutilsKillTask(
|
||||||
/* [in] */ handle_t IDL_handle,
|
/* [in] */ handle_t IDL_handle,
|
||||||
/* [in] */ KILLTASK_REQUEST *request) {
|
/* [in] */ KILLTASK_REQUEST *request) {
|
||||||
DWORD dwError = ERROR_SUCCESS;
|
DWORD dwError = ERROR_SUCCESS;
|
||||||
HRESULT hr;
|
|
||||||
WCHAR bufferName[MAX_PATH];
|
WCHAR bufferName[MAX_PATH];
|
||||||
|
|
||||||
dwError = GetSecureJobObjectName(request->taskName, MAX_PATH, bufferName);
|
dwError = GetSecureJobObjectName(request->taskName, MAX_PATH, bufferName);
|
||||||
|
|
|
@ -19,6 +19,9 @@
|
||||||
#include <psapi.h>
|
#include <psapi.h>
|
||||||
#include <PowrProf.h>
|
#include <PowrProf.h>
|
||||||
|
|
||||||
|
#ifdef PSAPI_VERSION
|
||||||
|
#undef PSAPI_VERSION
|
||||||
|
#endif
|
||||||
#define PSAPI_VERSION 1
|
#define PSAPI_VERSION 1
|
||||||
#pragma comment(lib, "psapi.lib")
|
#pragma comment(lib, "psapi.lib")
|
||||||
#pragma comment(lib, "Powrprof.lib")
|
#pragma comment(lib, "Powrprof.lib")
|
||||||
|
|
|
@ -22,6 +22,9 @@
|
||||||
#include <authz.h>
|
#include <authz.h>
|
||||||
#include <sddl.h>
|
#include <sddl.h>
|
||||||
|
|
||||||
|
#ifdef PSAPI_VERSION
|
||||||
|
#undef PSAPI_VERSION
|
||||||
|
#endif
|
||||||
#define PSAPI_VERSION 1
|
#define PSAPI_VERSION 1
|
||||||
#pragma comment(lib, "psapi.lib")
|
#pragma comment(lib, "psapi.lib")
|
||||||
|
|
||||||
|
@ -231,7 +234,7 @@ DWORD BuildImpersonateSecurityDescriptor(__out PSECURITY_DESCRIPTOR* ppSD) {
|
||||||
LocalFree(tokens);
|
LocalFree(tokens);
|
||||||
tokens = NULL;
|
tokens = NULL;
|
||||||
|
|
||||||
LocalFree(value);
|
LocalFree((HLOCAL)value);
|
||||||
value = NULL;
|
value = NULL;
|
||||||
|
|
||||||
dwError = GetConfigValue(wsceConfigRelativePath, NM_WSCE_IMPERSONATE_DENIED, &len, &value);
|
dwError = GetConfigValue(wsceConfigRelativePath, NM_WSCE_IMPERSONATE_DENIED, &len, &value);
|
||||||
|
@ -298,18 +301,18 @@ done:
|
||||||
//
|
//
|
||||||
DWORD AddNodeManagerAndUserACEsToObject(
|
DWORD AddNodeManagerAndUserACEsToObject(
|
||||||
__in HANDLE hObject,
|
__in HANDLE hObject,
|
||||||
__in LPWSTR user,
|
__in LPCWSTR user,
|
||||||
__in ACCESS_MASK accessMask) {
|
__in ACCESS_MASK accessMask) {
|
||||||
|
|
||||||
DWORD dwError = ERROR_SUCCESS;
|
DWORD dwError = ERROR_SUCCESS;
|
||||||
int countTokens = 0;
|
size_t countTokens = 0;
|
||||||
size_t len = 0;
|
size_t len = 0;
|
||||||
LPCWSTR value = NULL;
|
LPCWSTR value = NULL;
|
||||||
WCHAR** tokens = NULL;
|
WCHAR** tokens = NULL;
|
||||||
int crt = 0;
|
DWORD crt = 0;
|
||||||
PACL pDacl = NULL;
|
PACL pDacl = NULL;
|
||||||
PSECURITY_DESCRIPTOR psdProcess = NULL;
|
PSECURITY_DESCRIPTOR psdProcess = NULL;
|
||||||
LPSTR lpszOldDacl = NULL, lpszNewDacl = NULL;
|
LPWSTR lpszOldDacl = NULL, lpszNewDacl = NULL;
|
||||||
ULONG daclLen = 0;
|
ULONG daclLen = 0;
|
||||||
PACL pNewDacl = NULL;
|
PACL pNewDacl = NULL;
|
||||||
ACL_SIZE_INFORMATION si;
|
ACL_SIZE_INFORMATION si;
|
||||||
|
@ -381,8 +384,8 @@ DWORD AddNodeManagerAndUserACEsToObject(
|
||||||
// ACCESS_ALLOWED_ACE struct contains the first DWORD of the SID
|
// ACCESS_ALLOWED_ACE struct contains the first DWORD of the SID
|
||||||
//
|
//
|
||||||
dwNewAclSize = si.AclBytesInUse +
|
dwNewAclSize = si.AclBytesInUse +
|
||||||
(countTokens + 1 + sizeof(forcesSidTypes)/sizeof(forcesSidTypes[0])) *
|
(DWORD)(countTokens + 1 + sizeof(forcesSidTypes)/sizeof(forcesSidTypes[0])) *
|
||||||
(sizeof(ACCESS_ALLOWED_ACE) + SECURITY_MAX_SID_SIZE - sizeof(DWORD));
|
(sizeof(ACCESS_ALLOWED_ACE) + SECURITY_MAX_SID_SIZE - sizeof(DWORD));
|
||||||
|
|
||||||
pNewDacl = (PSID) LocalAlloc(LPTR, dwNewAclSize);
|
pNewDacl = (PSID) LocalAlloc(LPTR, dwNewAclSize);
|
||||||
if (!pNewDacl) {
|
if (!pNewDacl) {
|
||||||
|
@ -511,7 +514,7 @@ DWORD AddNodeManagerAndUserACEsToObject(
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
LogDebugMessage(L"Old DACL: %s\nNew DACL: %s\n", lpszOldDacl, lpszNewDacl);
|
LogDebugMessage(L"Old DACL: %ls\nNew DACL: %ls\n", lpszOldDacl, lpszNewDacl);
|
||||||
}
|
}
|
||||||
|
|
||||||
done:
|
done:
|
||||||
|
@ -634,7 +637,7 @@ done:
|
||||||
// Returns:
|
// Returns:
|
||||||
// ERROR_SUCCESS: On success
|
// ERROR_SUCCESS: On success
|
||||||
// GetLastError: otherwise
|
// GetLastError: otherwise
|
||||||
DWORD CreateTaskImpl(__in_opt HANDLE logonHandle, __in PCWSTR jobObjName,__in PCWSTR cmdLine,
|
DWORD CreateTaskImpl(__in_opt HANDLE logonHandle, __in PCWSTR jobObjName,__in PWSTR cmdLine,
|
||||||
__in LPCWSTR userName, __in long memory, __in long cpuRate)
|
__in LPCWSTR userName, __in long memory, __in long cpuRate)
|
||||||
{
|
{
|
||||||
DWORD dwErrorCode = ERROR_SUCCESS;
|
DWORD dwErrorCode = ERROR_SUCCESS;
|
||||||
|
@ -912,7 +915,7 @@ DWORD CreateTask(__in PCWSTR jobObjName,__in PWSTR cmdLine, __in long memory, __
|
||||||
// ERROR_SUCCESS: On success
|
// ERROR_SUCCESS: On success
|
||||||
// GetLastError: otherwise
|
// GetLastError: otherwise
|
||||||
DWORD CreateTaskAsUser(__in PCWSTR jobObjName,
|
DWORD CreateTaskAsUser(__in PCWSTR jobObjName,
|
||||||
__in PCWSTR user, __in PCWSTR pidFilePath, __in PCWSTR cmdLine)
|
__in PCWSTR user, __in PCWSTR pidFilePath, __in PWSTR cmdLine)
|
||||||
{
|
{
|
||||||
DWORD err = ERROR_SUCCESS;
|
DWORD err = ERROR_SUCCESS;
|
||||||
DWORD exitCode = EXIT_FAILURE;
|
DWORD exitCode = EXIT_FAILURE;
|
||||||
|
@ -923,6 +926,7 @@ DWORD CreateTaskAsUser(__in PCWSTR jobObjName,
|
||||||
FILE* pidFile = NULL;
|
FILE* pidFile = NULL;
|
||||||
DWORD retLen = 0;
|
DWORD retLen = 0;
|
||||||
HANDLE logonHandle = NULL;
|
HANDLE logonHandle = NULL;
|
||||||
|
errno_t pidErrNo = 0;
|
||||||
|
|
||||||
err = EnableImpersonatePrivileges();
|
err = EnableImpersonatePrivileges();
|
||||||
if( err != ERROR_SUCCESS ) {
|
if( err != ERROR_SUCCESS ) {
|
||||||
|
@ -961,8 +965,8 @@ DWORD CreateTaskAsUser(__in PCWSTR jobObjName,
|
||||||
profileIsLoaded = TRUE;
|
profileIsLoaded = TRUE;
|
||||||
|
|
||||||
// Create the PID file
|
// Create the PID file
|
||||||
|
pidErrNo = _wfopen_s(&pidFile, pidFilePath, L"w");
|
||||||
if (!(pidFile = _wfopen(pidFilePath, "w"))) {
|
if (pidErrNo) {
|
||||||
err = GetLastError();
|
err = GetLastError();
|
||||||
ReportErrorCode(L"_wfopen:pidFilePath", err);
|
ReportErrorCode(L"_wfopen:pidFilePath", err);
|
||||||
goto done;
|
goto done;
|
||||||
|
|
Loading…
Reference in New Issue