177 lines
2.4 KiB
C
177 lines
2.4 KiB
C
|
|
||
|
|
||
|
#include "precomp.h"
|
||
|
|
||
|
|
||
|
BOOL
|
||
|
AreGuidsEqual(
|
||
|
GUID gOldGuid,
|
||
|
GUID gNewGuid
|
||
|
)
|
||
|
{
|
||
|
if (!memcmp(
|
||
|
&(gOldGuid),
|
||
|
&(gNewGuid),
|
||
|
sizeof(GUID))) {
|
||
|
return (TRUE);
|
||
|
}
|
||
|
|
||
|
return (FALSE);
|
||
|
}
|
||
|
|
||
|
|
||
|
VOID
|
||
|
CopyGuid(
|
||
|
GUID gInGuid,
|
||
|
GUID * pgOutGuid
|
||
|
)
|
||
|
{
|
||
|
memcpy(
|
||
|
pgOutGuid,
|
||
|
&gInGuid,
|
||
|
sizeof(GUID)
|
||
|
);
|
||
|
}
|
||
|
|
||
|
|
||
|
DWORD
|
||
|
CopyName(
|
||
|
LPWSTR pszInName,
|
||
|
LPWSTR * ppszOutName
|
||
|
)
|
||
|
{
|
||
|
DWORD dwError = 0;
|
||
|
LPWSTR pszOutName = NULL;
|
||
|
|
||
|
|
||
|
if (pszInName && *(pszInName)) {
|
||
|
|
||
|
dwError = SPDApiBufferAllocate(
|
||
|
wcslen(pszInName)*sizeof(WCHAR) + sizeof(WCHAR),
|
||
|
&pszOutName
|
||
|
);
|
||
|
BAIL_ON_WIN32_ERROR(dwError);
|
||
|
wcscpy(pszOutName, pszInName);
|
||
|
|
||
|
}
|
||
|
|
||
|
*ppszOutName = pszOutName;
|
||
|
return (dwError);
|
||
|
|
||
|
error:
|
||
|
|
||
|
*ppszOutName = NULL;
|
||
|
return (dwError);
|
||
|
}
|
||
|
|
||
|
|
||
|
DWORD
|
||
|
SPDApiBufferAllocate(
|
||
|
DWORD dwByteCount,
|
||
|
LPVOID * ppBuffer
|
||
|
)
|
||
|
{
|
||
|
DWORD dwError = 0;
|
||
|
|
||
|
if (ppBuffer == NULL) {
|
||
|
dwError = ERROR_INVALID_PARAMETER;
|
||
|
BAIL_ON_WIN32_ERROR(dwError);
|
||
|
}
|
||
|
|
||
|
*ppBuffer = MIDL_user_allocate(dwByteCount);
|
||
|
|
||
|
if (*ppBuffer == NULL) {
|
||
|
dwError = ERROR_OUTOFMEMORY;
|
||
|
BAIL_ON_WIN32_ERROR(dwError);
|
||
|
}
|
||
|
|
||
|
error:
|
||
|
|
||
|
return (dwError);
|
||
|
}
|
||
|
|
||
|
|
||
|
VOID
|
||
|
SPDApiBufferFree(
|
||
|
LPVOID pBuffer
|
||
|
)
|
||
|
{
|
||
|
if (pBuffer) {
|
||
|
MIDL_user_free(pBuffer);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
BOOL
|
||
|
AreNamesEqual(
|
||
|
LPWSTR pszOldName,
|
||
|
LPWSTR pszNewName
|
||
|
)
|
||
|
{
|
||
|
BOOL bEqual = FALSE;
|
||
|
|
||
|
|
||
|
if (pszOldName && *pszOldName) {
|
||
|
|
||
|
if (!pszNewName || !*pszNewName) {
|
||
|
bEqual = FALSE;
|
||
|
}
|
||
|
else {
|
||
|
|
||
|
if (!_wcsicmp(pszOldName, pszNewName)) {
|
||
|
bEqual = TRUE;
|
||
|
}
|
||
|
else {
|
||
|
bEqual = FALSE;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
else {
|
||
|
|
||
|
if (!pszNewName || !*pszNewName) {
|
||
|
bEqual = TRUE;
|
||
|
}
|
||
|
else {
|
||
|
bEqual = FALSE;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
return (bEqual);
|
||
|
}
|
||
|
|
||
|
|
||
|
DWORD
|
||
|
SPDImpersonateClient(
|
||
|
PBOOL pbImpersonating
|
||
|
)
|
||
|
{
|
||
|
DWORD dwError = 0;
|
||
|
|
||
|
|
||
|
dwError = RpcImpersonateClient(NULL);
|
||
|
BAIL_ON_WIN32_ERROR(dwError);
|
||
|
|
||
|
*pbImpersonating = TRUE;
|
||
|
return (dwError);
|
||
|
|
||
|
error:
|
||
|
|
||
|
*pbImpersonating = FALSE;
|
||
|
return (dwError);
|
||
|
}
|
||
|
|
||
|
|
||
|
VOID
|
||
|
SPDRevertToSelf(
|
||
|
BOOL bImpersonating
|
||
|
)
|
||
|
{
|
||
|
if (bImpersonating) {
|
||
|
RpcRevertToSelf();
|
||
|
}
|
||
|
}
|
||
|
|