windows-nt/Source/XPSP1/NT/ds/security/services/ca/certlib/advapi32.cpp
2020-09-26 16:20:57 +08:00

154 lines
3 KiB
C++

//+-------------------------------------------------------------------------
//
// Microsoft Windows
//
// Copyright (C) Microsoft Corporation, 1995 - 1999
//
// File: advapi32.cpp
//
// Contents: advapi32.dll wrapper functions
//
//--------------------------------------------------------------------------
#include <pch.cpp>
#pragma hdrstop
typedef BOOL (WINAPI FNSTRINGSDTOSD)(
IN LPCWSTR StringSecurityDescriptor,
IN DWORD StringSDRevision,
OUT PSECURITY_DESCRIPTOR *SecurityDescriptor,
OUT PULONG SecurityDescriptorSize OPTIONAL);
BOOL
myConvertStringSecurityDescriptorToSecurityDescriptor(
IN LPCWSTR StringSecurityDescriptor,
IN DWORD StringSDRevision,
OUT PSECURITY_DESCRIPTOR *SecurityDescriptor,
OUT PULONG SecurityDescriptorSize OPTIONAL)
{
HMODULE hModule;
BOOL f = FALSE;
DWORD err;
static FNSTRINGSDTOSD *s_pfn = NULL;
if (NULL == s_pfn)
{
// load dll
hModule = GetModuleHandle(TEXT("advapi32.dll"));
if (NULL == hModule)
{
goto error;
}
// load system function
s_pfn = (FNSTRINGSDTOSD *) GetProcAddress(
hModule,
"ConvertStringSecurityDescriptorToSecurityDescriptorW");
if (NULL == s_pfn)
{
goto error;
}
}
f = (*s_pfn)(
StringSecurityDescriptor,
StringSDRevision,
SecurityDescriptor,
SecurityDescriptorSize);
if (!f)
goto error;
myRegisterMemAlloc(
*SecurityDescriptor,
((NULL == SecurityDescriptorSize) ? -1 : *SecurityDescriptorSize),
CSM_LOCALALLOC);
error:
return(f);
}
typedef BOOL (WINAPI FNSIDTOSTRINGSID)(
IN PSID Sid,
OUT LPWSTR *StringSid);
BOOL
myConvertSidToStringSid(
IN PSID Sid,
OUT LPWSTR *StringSid)
{
HMODULE hModule;
BOOL f = FALSE;
DWORD err;
static FNSIDTOSTRINGSID *s_pfn = NULL;
if (NULL == s_pfn)
{
// load dll
hModule = GetModuleHandle(TEXT("advapi32.dll"));
if (NULL == hModule)
{
goto error;
}
// load system function
s_pfn = (FNSIDTOSTRINGSID *) GetProcAddress(
hModule,
"ConvertSidToStringSidW");
if (NULL == s_pfn)
{
goto error;
}
}
f = (*s_pfn)(Sid, StringSid);
if (!f)
goto error;
myRegisterMemAlloc(*StringSid, -1, CSM_LOCALALLOC);
error:
return(f);
}
typedef BOOL (WINAPI FNSTRINGSIDTOSID)(
IN LPCWSTR StringSid,
OUT PSID *Sid);
BOOL
myConvertStringSidToSid(
IN LPCWSTR StringSid,
OUT PSID *Sid)
{
HMODULE hModule;
BOOL f = FALSE;
DWORD err;
static FNSTRINGSIDTOSID *s_pfn = NULL;
if (NULL == s_pfn)
{
// load dll
hModule = GetModuleHandle(TEXT("advapi32.dll"));
if (NULL == hModule)
{
goto error;
}
// load system function
s_pfn = (FNSTRINGSIDTOSID *) GetProcAddress(
hModule,
"ConvertStringSidToSidW");
if (NULL == s_pfn)
{
goto error;
}
}
f = (*s_pfn)(StringSid, Sid);
if (!f)
goto error;
myRegisterMemAlloc(*Sid, -1, CSM_LOCALALLOC);
error:
return(f);
}