windows-nt/Source/XPSP1/NT/net/layer2svc/zeroconf/server/utils.h
2020-09-26 16:20:57 +08:00

114 lines
4 KiB
C

#include "wzccrypt.h"
#pragma once
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// MEMORY ALLOCATION UTILITIES (defines, structs, funcs)
#define MemCAlloc(nBytes) Process_user_allocate(nBytes)
#define MemFree(pMem) Process_user_free(pMem)
PVOID
Process_user_allocate(size_t NumBytes);
VOID
Process_user_free(LPVOID pMem);
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// NDIS UTILITIES (defines, structs, funcs)
//-----------------------------------------------------------
// Searches pwzcConfig in the list pwzcVList. The entries are
// matched exclusively based on the matching SSIDs and on
// matching Infrastructure Mode.
// [in] pwzcVList: Set of WZC_WLAN_CONFIGs to search in
// [in] pwzcConfig: WZC_WLAN_CONFIG to look for
// [in] nIdx: index in pwzcVList to start searching from
// Returns: Pointer to the entry that matches pwzcConfig or NULL
// if none matches
PWZC_WLAN_CONFIG
WzcFindConfig(
PWZC_802_11_CONFIG_LIST pwzcList,
PWZC_WLAN_CONFIG pwzcConfig,
ULONG nIdx);
// Matches the content of the two configurations one against the other.
// [in] pwzcConfigA: | configs to match
// [in] pwzcConfigB: |
// [in/out] pbWepDiffOnly: TRUE if there is a difference and the difference is exclusively
// in the WEP Key index or in WEP Key Material. Otherwise is false.
// Returns: TRUE if the configs match, FALSE otherwise;
BOOL
WzcMatchConfig(
PWZC_WLAN_CONFIG pwzcConfigA,
PWZC_WLAN_CONFIG pwzcConfigB,
PBOOL pbWepDiffOnly);
// Converts an NDIS_802_11_BSSID_LIST object to an equivalent
// (imaged) WZC_802_11_CONFIG_LIST
// [in] pndList: NDIS BSSID list to convert
// Returns: Pointer to the list of copied WZC configurations
PWZC_802_11_CONFIG_LIST
WzcNdisToWzc(
PNDIS_802_11_BSSID_LIST pndList);
// WzcCleanupList: Cleanup a list of WZC_WLAN_CONFIG objects
VOID
WzcCleanupWzcList(
PWZC_802_11_CONFIG_LIST pwzcList);
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// SYNCHRONIZATION UTILITIES
//-----------------------------------------------------------
// Datastructures
// RCCS_SYNC encapsulates a critical section and a reference counter.
typedef struct _RCCS_SYNC
{
CRITICAL_SECTION csMutex;
UINT nRefCount;
} RCCS_SYNC, *PRCCS_SYNC;
//-----------------------------------------------------------
// RccsInit: Initializes an RCCS structure
DWORD
RccsInit(PRCCS_SYNC pRccs);
//-----------------------------------------------------------
// RccsInit: Deletes an RCCS structure
DWORD
RccsDestroy(PRCCS_SYNC pRccs);
//-----------------------------------------------------------
// WzcCryptBuffer: Randomly generates a nBufLen bytes in the range
// [loByte hiByte], all stored in pBuffer (buffer assumed preallocated)
// Returns a win32 error code.
DWORD
WzcRndGenBuffer(LPBYTE pBuffer, UINT nBufLen, BYTE loByte, BYTE hiByte);
//-----------------------------------------------------------
// WzcIsNullBuffer: Checks whether a buffer of nBufLen characters
// is all filled with null characters.
BOOL
WzcIsNullBuffer(LPBYTE pBuffer, UINT nBufLen);
//-----------------------------------------------------------
// WzcSSKClean: Cleans up the PSEC_SESSION_KEYS object given as parameter
VOID
WzcSSKClean(PSEC_SESSION_KEYS pSSK);
//-----------------------------------------------------------
// WzcSSKFree: Frees up the memory used by the PSEC_SESSION_KEYS parameter
VOID
WzcSSKFree(PSEC_SESSION_KEYS pSSK);
//-----------------------------------------------------------
// WzcSSKEncrypt: Creates/Allocates a SEC_SESSION_KEYS object
// by encrypting the SESSION_KEYS object provided as parameter.
DWORD
WzcSSKEncrypt(PSEC_SESSION_KEYS pSSK, PSESSION_KEYS pSK);
//-----------------------------------------------------------
// WzcSSKDecrypt: Creates/Allocates a SESSION_KEYS object
// by dencrypting the SEC_SESSION_KEYS object provided as parameter.
DWORD
WzcSSKDecrypt(PSEC_SESSION_KEYS pSSK, PSESSION_KEYS pSK);