134 lines
2.3 KiB
C++
134 lines
2.3 KiB
C++
|
/*++
|
||
|
|
||
|
Copyright (C) 2000 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
dpapistb.cpp
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
RPC Proxy Stub to handle downlevel requests to the services.exe
|
||
|
pipe
|
||
|
|
||
|
Author:
|
||
|
|
||
|
petesk 3/1/00
|
||
|
|
||
|
Revisions:
|
||
|
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#define _CRYPT32_ // use correct Dll Linkage
|
||
|
|
||
|
#include <nt.h>
|
||
|
#include <ntrtl.h>
|
||
|
#include <nturtl.h>
|
||
|
#include <windows.h>
|
||
|
#include <wincrypt.h>
|
||
|
|
||
|
|
||
|
// midl generated files
|
||
|
#include "dpapiprv.h"
|
||
|
#include "keyrpc.h"
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
DWORD
|
||
|
s_BackuprKey(
|
||
|
/* [in] */ handle_t h,
|
||
|
/* [in] */ GUID __RPC_FAR *pguidActionAgent,
|
||
|
/* [in] */ BYTE __RPC_FAR *pDataIn,
|
||
|
/* [in] */ DWORD cbDataIn,
|
||
|
/* [size_is][size_is][out] */ BYTE __RPC_FAR *__RPC_FAR *ppDataOut,
|
||
|
/* [out] */ DWORD __RPC_FAR *pcbDataOut,
|
||
|
/* [in] */ DWORD dwParam
|
||
|
)
|
||
|
{
|
||
|
|
||
|
RPC_BINDING_HANDLE hProxy = NULL;
|
||
|
WCHAR *pStringBinding = NULL;
|
||
|
RPC_SECURITY_QOS RpcQos;
|
||
|
|
||
|
RPC_STATUS RpcStatus = RPC_S_OK;
|
||
|
|
||
|
|
||
|
RpcStatus = RpcImpersonateClient(h);
|
||
|
|
||
|
if (RPC_S_OK != RpcStatus)
|
||
|
{
|
||
|
return RpcStatus;
|
||
|
}
|
||
|
|
||
|
RpcStatus = RpcStringBindingComposeW(
|
||
|
NULL,
|
||
|
DPAPI_LOCAL_PROT_SEQ,
|
||
|
NULL,
|
||
|
DPAPI_LOCAL_ENDPOINT,
|
||
|
NULL,
|
||
|
&pStringBinding);
|
||
|
if (RPC_S_OK != RpcStatus)
|
||
|
{
|
||
|
goto error;
|
||
|
}
|
||
|
|
||
|
RpcStatus = RpcBindingFromStringBindingW(
|
||
|
pStringBinding,
|
||
|
&hProxy);
|
||
|
if (NULL != pStringBinding)
|
||
|
{
|
||
|
RpcStringFreeW(&pStringBinding);
|
||
|
}
|
||
|
if (RPC_S_OK != RpcStatus)
|
||
|
{
|
||
|
goto error;
|
||
|
}
|
||
|
|
||
|
RpcStatus = RpcEpResolveBinding(
|
||
|
hProxy,
|
||
|
BackupKey_v1_0_c_ifspec);
|
||
|
if (RPC_S_OK != RpcStatus)
|
||
|
{
|
||
|
goto error;
|
||
|
|
||
|
}
|
||
|
|
||
|
__try
|
||
|
{
|
||
|
|
||
|
RpcStatus = BackuprKey(
|
||
|
hProxy,
|
||
|
(GUID*)pguidActionAgent,
|
||
|
pDataIn,
|
||
|
cbDataIn,
|
||
|
ppDataOut,
|
||
|
pcbDataOut,
|
||
|
dwParam
|
||
|
);
|
||
|
|
||
|
}
|
||
|
__except ( EXCEPTION_EXECUTE_HANDLER )
|
||
|
{
|
||
|
RpcStatus = _exception_code();
|
||
|
}
|
||
|
|
||
|
error:
|
||
|
|
||
|
if(hProxy)
|
||
|
{
|
||
|
RpcBindingFree(&hProxy);
|
||
|
}
|
||
|
|
||
|
RpcRevertToSelf();
|
||
|
|
||
|
return RpcStatus;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|