windows-nt/Source/XPSP1/NT/ds/security/cryptoapi/cryptsvc/certprot.cpp
2020-09-26 16:20:57 +08:00

94 lines
2.3 KiB
C++

/*++
Copyright (c) 1996, 1997 Microsoft Corporation
Module Name:
certprot.cpp
Abstract:
This module contains routines associated with server side
I_CertProtectFunctions operations.
Author:
Phil Hallin (philh) 19-Nov-97
--*/
#include <windows.h>
#include <wincrypt.h>
#include "cerrpc.h" // header file generated by MIDL compiler
#include "certprot.h"
///////////////////////////////////////////////////////////////////////
// LPC-exposed functions
//
// these functions return a DWORD equivalent to GetLastError().
// the client side stub code will check if the return code is not
// ERROR_SUCCESS, and if this is the case, the client stub will return
// FALSE and SetLastError() to this DWORD.
//
DWORD s_SSCertProtectFunction(
/* [in] */ handle_t h,
/* [in] */ DWORD dwFuncId,
/* [in] */ DWORD dwFlags,
/* [in] */ LPCWSTR pwszIn,
/* [size_is][in] */ BYTE __RPC_FAR *pbIn,
/* [in] */ DWORD cbIn,
/* [size_is][size_is][out] */ BYTE __RPC_FAR *__RPC_FAR *ppbOut,
/* [out] */ DWORD __RPC_FAR *pcbOut)
{
DWORD dwRet;
__try {
{
HINSTANCE hCrypt32Dll;
PFN_CERT_SRV_PROTECT_FUNCTION pfnCertSrvProtectFunction;
*ppbOut = NULL;
*pcbOut = 0;
hCrypt32Dll = LoadLibraryW(L"crypt32.dll");
if (hCrypt32Dll == NULL) {
dwRet = GetLastError();
goto Ret;
}
if (NULL == (pfnCertSrvProtectFunction =
(PFN_CERT_SRV_PROTECT_FUNCTION) GetProcAddress(
hCrypt32Dll, "I_CertSrvProtectFunction")))
dwRet = ERROR_PROC_NOT_FOUND;
else
dwRet = pfnCertSrvProtectFunction(
h,
dwFuncId,
dwFlags,
pwszIn,
pbIn,
cbIn,
ppbOut,
pcbOut,
midl_user_allocate,
midl_user_free
);
FreeLibrary(hCrypt32Dll);
goto Ret;
}
} __except( EXCEPTION_EXECUTE_HANDLER ) {
dwRet = GetExceptionCode();
// TODO: for NT, convert exception code to winerror.
// for 95, just override to access violation.
}
Ret:
return dwRet;
}