Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

102 lines
2.4 KiB

#include "precomp.h"
DWORD
ExportFilterDataToFile(
HANDLE hSrcPolicyStore,
PIPSEC_POLICY_STORE pDesPolicyStore
)
{
DWORD dwError = 0;
PIPSEC_FILTER_DATA * ppIpsecFilterData = NULL;
DWORD dwNumFilterObjects = 0;
DWORD i = 0;
PIPSEC_FILTER_DATA pIpsecFilterData = NULL;
dwError = IPSecEnumFilterData(
hSrcPolicyStore,
&ppIpsecFilterData,
&dwNumFilterObjects
);
BAIL_ON_WIN32_ERROR(dwError);
for (i = 0; i < dwNumFilterObjects; i++) {
pIpsecFilterData = *(ppIpsecFilterData + i);
dwError = RegCreateFilterData(
pDesPolicyStore->hRegistryKey,
pDesPolicyStore->pszIpsecRootContainer,
pIpsecFilterData
);
BAIL_ON_WIN32_ERROR(dwError);
}
error:
if (ppIpsecFilterData) {
FreeMulIpsecFilterData(
ppIpsecFilterData,
dwNumFilterObjects
);
}
return (dwError);
}
DWORD
ImportFilterDataFromFile(
PIPSEC_POLICY_STORE pSrcPolicyStore,
HANDLE hDesPolicyStore
)
{
DWORD dwError = 0;
PIPSEC_FILTER_DATA * ppIpsecFilterData = NULL;
DWORD dwNumFilterObjects = 0;
DWORD i = 0;
PIPSEC_FILTER_DATA pIpsecFilterData = NULL;
dwError = RegEnumFilterData(
pSrcPolicyStore->hRegistryKey,
pSrcPolicyStore->pszIpsecRootContainer,
&ppIpsecFilterData,
&dwNumFilterObjects
);
BAIL_ON_WIN32_ERROR(dwError);
for (i = 0; i < dwNumFilterObjects; i++) {
pIpsecFilterData = *(ppIpsecFilterData + i);
dwError = IPSecCreateFilterData(
hDesPolicyStore,
pIpsecFilterData
);
if (dwError == ERROR_OBJECT_ALREADY_EXISTS) {
dwError = IPSecSetFilterData(
hDesPolicyStore,
pIpsecFilterData
);
BAIL_ON_WIN32_ERROR(dwError);
}
BAIL_ON_WIN32_ERROR(dwError);
}
error:
if (ppIpsecFilterData) {
FreeMulIpsecFilterData(
ppIpsecFilterData,
dwNumFilterObjects
);
}
return (dwError);
}