201 lines
8.4 KiB
C
201 lines
8.4 KiB
C
/////////////////////////////////////////////////////////////
|
||
// Copyright(c) 1998-2000, Microsoft Corporation
|
||
//
|
||
// usepa.h
|
||
//
|
||
// Created on 8/15/98 by Randyram
|
||
// Revisions:
|
||
// 2/29/00 - DKalin
|
||
// Removed out-of-date PA routines
|
||
// Added new ipsecpol service management routines
|
||
//
|
||
// Includes util routines enables you to call PA and ipsecpolsvc RPC API
|
||
//
|
||
/////////////////////////////////////////////////////////////
|
||
|
||
#ifndef _USEPARPC_H_
|
||
#define _USEPARPC_H_
|
||
|
||
#include <tchar.h>
|
||
#include <windows.h>
|
||
|
||
|
||
// const defs
|
||
const _TUCHAR szLOCALENDPT[] = TEXT("policyagent");
|
||
const TCHAR szLOCAL_MACHINE[] = TEXT("\\\\.");
|
||
const UINT USEPARPC_LOCLEN = sizeof(szLOCAL_MACHINE) / sizeof(TCHAR);
|
||
|
||
|
||
////////////////////////////////////////////////////////////////
|
||
// Function: PAIsRunning
|
||
// Purpose: checks to see if Policy Agent service is up
|
||
//
|
||
// Pre-conditions: none
|
||
//
|
||
// Parameters:
|
||
// dwReturn OUT holds errors returned from SCM if any
|
||
// szServ IN OPT if not NULL, name of remote machine
|
||
// Returns:
|
||
// true on success (dwReturn is set to ERROR_SUCCESS)
|
||
// false && dwReturn == ERROR_SUCCESS means PA service is not running
|
||
// false && dwReturn != ERROR_SUCCESS an SCM operation failed,
|
||
// dwReturn holds GetLastError from SCM call
|
||
|
||
bool PAIsRunning(OUT DWORD &dwReturn, OPTIONAL TCHAR *szServ = NULL);
|
||
|
||
////////////////////////////////////////////////////////////////
|
||
// Function: StartPA
|
||
// Purpose: starts policy agent service
|
||
//
|
||
// Pre-conditions: none
|
||
//
|
||
// Parameters:
|
||
// dwReturn OUT holds errors returned from SCM if any
|
||
// szServ IN OPT if not NULL, name of remote machine
|
||
// Returns:
|
||
// true on success (dwReturn is set to ERROR_SUCCESS)
|
||
// false && dwReturn != ERROR_SUCCESS an SCM operation failed,
|
||
// dwReturn holds GetLastError from SCM call
|
||
|
||
bool StartPA(OUT DWORD &dwReturn, OPTIONAL TCHAR *szServ = NULL);
|
||
|
||
/*********************************************************************
|
||
FUNCTION: InstallIpsecpolService
|
||
PURPOSE: Installs ipsecpolsvc service (incl. copying .exe to system32 dir)
|
||
PARAMS:
|
||
pszFilename - name of the .exe file (full path recommended)
|
||
bFailIfExists - if TRUE, fail if service already exists,
|
||
if FALSE, stop service, delete it and proceed
|
||
( default = TRUE )
|
||
RETURNS: ERROR_SUCESS or GetLastError code
|
||
COMMENTS:
|
||
*********************************************************************/
|
||
DWORD InstallIpsecpolService (IN LPCTSTR pszFilename, IN OPTIONAL BOOL bFailIfExists = TRUE );
|
||
|
||
/*********************************************************************
|
||
FUNCTION: StartIpsecpolService
|
||
PURPOSE: Attempts to start ipsecpolsvc service
|
||
PARAMS:
|
||
pszServ - optional name of the server (default is NULL, start on local machine)
|
||
RETURNS: ERROR_SUCESS or GetLastError code
|
||
COMMENTS:
|
||
*********************************************************************/
|
||
DWORD StartIpsecpolService (IN OPTIONAL LPCTSTR pszServ = NULL);
|
||
|
||
/*********************************************************************
|
||
FUNCTION: StopIpsecpolService
|
||
PURPOSE: Attempts to stop ipsecpolsvc service
|
||
PARAMS:
|
||
pszServ - optional name of the server (default is NULL, start on local machine)
|
||
RETURNS: ERROR_SUCESS or GetLastError code
|
||
COMMENTS:
|
||
*********************************************************************/
|
||
DWORD StopIpsecpolService (IN OPTIONAL LPCTSTR pszServ = NULL);
|
||
|
||
/*********************************************************************
|
||
FUNCTION: IsIpsecpolServiceRunning
|
||
PURPOSE: Checks if ipsecpolsvc service is currently running
|
||
PARAMS:
|
||
dwReturn - holds errors retuned by SCM if any
|
||
pszServ - optional name of the server (default is NULL, start on local machine)
|
||
RETURNS: TRUE/FALSE
|
||
COMMENTS: TRUE returned means service is running
|
||
FALSE and dwReturn == ERROR_SUCCESS means service is not running
|
||
FALSE and dwReturn != ERROR_SUCCESS means SCM operation failed (dwReturn is error code)
|
||
*********************************************************************/
|
||
BOOL IsIpsecpolServiceRunning (OUT DWORD &dwReturn, OPTIONAL LPCTSTR pszServ = NULL);
|
||
|
||
/*********************************************************************
|
||
FUNCTION: InitIpsecpolsvcRPC
|
||
PURPOSE: Get an RPC handle from ipsecpolsvc that can be used to call its APIs
|
||
PARAMS:
|
||
pszServ - name of the server (pass NULL for the local machine)
|
||
hIpsecpolsvc - returned handle
|
||
RETURNS: RPC_S_OK or RPC api error code
|
||
COMMENTS: Service running is not prereq
|
||
*********************************************************************/
|
||
RPC_STATUS InitIpsecpolsvcRPC (IN TCHAR* pszServ, OUT handle_t &hIpsecpolsvc);
|
||
|
||
/*********************************************************************
|
||
FUNCTION: ShutdownIpsecpolsvcRPC
|
||
PURPOSE: Close RPC handle
|
||
PARAMS:
|
||
hIpsecpolsvc - handle
|
||
RETURNS: RPC_S_OK or RPC api error code
|
||
COMMENTS:
|
||
*********************************************************************/
|
||
RPC_STATUS ShutdownIpsecpolsvcRPC (IN handle_t hIpsecpolsvc);
|
||
|
||
/*********************************************************************
|
||
FUNCTION: PlumbIPSecPolicy
|
||
PURPOSE: Plumbs IPSEC_IKE_POLICY to the specified machine
|
||
PARAMS:
|
||
pszServerName - machine name or NULL for local
|
||
pIPSecIkePol - pointer to IPSEC_IKE_POLICY.
|
||
GUIDs/names must be generated prior to the call
|
||
bFailMMIfExists - specifies MM filter behavior
|
||
bFailMMIfExists == FALSE will cause the call not to break
|
||
on ERROR_MM_FILTER_EXISTS when duplicate MM filters are there
|
||
bFailMMIfExists == TRUE will fail on any SPD API error
|
||
ppMMFilterHandles - array of mm filter handles will be returned here
|
||
ppFilterHandles - array of qm filter handles will be returned here
|
||
bPersist - if TRUE, information will be persisted
|
||
RETURNS: ERROR_SUCCESS or win32 error code
|
||
COMMENTS: CALLER is responsible for freeing the memory for the handle arrays
|
||
*********************************************************************/
|
||
DWORD
|
||
PlumbIPSecPolicy(
|
||
IN LPWSTR pServerName,
|
||
IN PIPSEC_IKE_POLICY pIPSecIkePol,
|
||
IN BOOL bFailMMIfExists,
|
||
OUT PHANDLE *ppMMFilterHandles,
|
||
OUT PHANDLE *ppFilterHandles,
|
||
IN OPTIONAL BOOL bPersist = FALSE
|
||
);
|
||
|
||
/*********************************************************************
|
||
FUNCTION: DeleteIPSecPolicy
|
||
PURPOSE: Complementary to PlumbIPSecPolicy, removes IPSEC_IKE_POLICY
|
||
PARAMS:
|
||
pszServerName - machine name or NULL for local
|
||
pIPSecIkePol - pointer to IPSEC_IKE_POLICY.
|
||
GUIDs/names must be generated prior to the call
|
||
pMMFilterHandles - array of main mode filter handles
|
||
pFilterHandles - array of quick mode filter handles
|
||
RETURNS: ERROR_SUCCESS or win32 error code
|
||
COMMENTS: Function will try to
|
||
remove everything specified in the IPSEC_IKE_POLICY structure.
|
||
It is possible that one or several errors will be encountered.
|
||
Function will continue, but later first error will be returned.
|
||
*********************************************************************/
|
||
DWORD
|
||
DeleteIPSecPolicy(
|
||
IN LPWSTR pServerName,
|
||
IN PIPSEC_IKE_POLICY pIPSecIkePol,
|
||
IN PHANDLE pMMFilterHandles,
|
||
IN PHANDLE pFilterHandles
|
||
);
|
||
|
||
/*********************************************************************
|
||
FUNCTION: DeletePersistedIPSecPolicy
|
||
PURPOSE: Complementary to PlumbIPSecPolicy with persistent flag on,
|
||
removes persisted policy
|
||
PARAMS:
|
||
pszServerName - machine name or NULL for local
|
||
pPolicyName - policy name prefix, if empty string of NULL,
|
||
all persisted policy settings will be removed
|
||
RETURNS: ERROR_SUCCESS or win32 error code
|
||
COMMENTS: Function will try to
|
||
remove everything specified.
|
||
It is possible that one or several errors will be encountered.
|
||
Function will continue, but later first error will be returned.
|
||
*********************************************************************/
|
||
DWORD
|
||
DeletePersistedIPSecPolicy(
|
||
IN LPWSTR pServerName,
|
||
IN LPWSTR pPolicyName
|
||
);
|
||
|
||
|
||
#endif /* _USEPARPC_H_ */
|
||
|