Something went wrong. Try again.
Reactos
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635/* * PROJECT: ReactOS WLAN Service * LICENSE: GPL - See COPYING in the top level directory * FILE: base/services/wlansvc/rpcserver.c * PURPOSE: RPC server interface * COPYRIGHT: Copyright 2009 Christoph von Wittich */
#include "precomp.h"
#define NDEBUG#include <debug.h>//#define GET_IF_ENTRY2_IMPLEMENTED 1
LIST_ENTRY WlanSvcHandleListHead;
DWORD WINAPI RpcThreadRoutine(LPVOID lpParameter){ RPC_STATUS Status;
InitializeListHead(&WlanSvcHandleListHead);
Status = RpcServerUseProtseqEpW(L"ncalrpc", 20, L"wlansvc", NULL); if (Status != RPC_S_OK) { DPRINT("RpcServerUseProtseqEpW() failed (Status %lx)\n", Status); return 0; }
Status = RpcServerRegisterIf(wlansvc_interface_v1_0_s_ifspec, NULL, NULL); if (Status != RPC_S_OK) { DPRINT("RpcServerRegisterIf() failed (Status %lx)\n", Status); return 0; }
Status = RpcServerListen(1, RPC_C_LISTEN_MAX_CALLS_DEFAULT, 0); if (Status != RPC_S_OK) { DPRINT("RpcServerListen() failed (Status %lx)\n", Status); }
DPRINT("RpcServerListen finished\n"); return 0;}
PWLANSVCHANDLE WlanSvcGetHandleEntry(LPWLANSVC_RPC_HANDLE ClientHandle){ PLIST_ENTRY CurrentEntry; PWLANSVCHANDLE lpWlanSvcHandle;
CurrentEntry = WlanSvcHandleListHead.Flink; while (CurrentEntry != &WlanSvcHandleListHead) { lpWlanSvcHandle = CONTAINING_RECORD(CurrentEntry, WLANSVCHANDLE, WlanSvcHandleListEntry); CurrentEntry = CurrentEntry->Flink;
if (lpWlanSvcHandle == (PWLANSVCHANDLE) ClientHandle) return lpWlanSvcHandle; }
return NULL;}
DWORD _RpcOpenHandle( wchar_t *arg_1, DWORD dwClientVersion, DWORD *pdwNegotiatedVersion, LPWLANSVC_RPC_HANDLE phClientHandle){ PWLANSVCHANDLE lpWlanSvcHandle;
lpWlanSvcHandle = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(WLANSVCHANDLE)); if (lpWlanSvcHandle == NULL) { DPRINT1("Failed to allocate Heap!\n"); return ERROR_NOT_ENOUGH_MEMORY; }
if (dwClientVersion > 2) dwClientVersion = 2;
if (dwClientVersion < 1) dwClientVersion = 1;
lpWlanSvcHandle->dwClientVersion = dwClientVersion; *pdwNegotiatedVersion = dwClientVersion;
InsertTailList(&WlanSvcHandleListHead, &lpWlanSvcHandle->WlanSvcHandleListEntry); *phClientHandle = lpWlanSvcHandle;
return ERROR_SUCCESS;}
DWORD _RpcCloseHandle( LPWLANSVC_RPC_HANDLE phClientHandle){ PWLANSVCHANDLE lpWlanSvcHandle;
lpWlanSvcHandle = WlanSvcGetHandleEntry(*phClientHandle); if (!lpWlanSvcHandle) { return ERROR_INVALID_HANDLE; }
RemoveEntryList(&lpWlanSvcHandle->WlanSvcHandleListEntry); HeapFree(GetProcessHeap(), 0, lpWlanSvcHandle);
return ERROR_SUCCESS;}
DWORD _RpcEnumInterfaces( WLANSVC_RPC_HANDLE hClientHandle, PWLAN_INTERFACE_INFO_LIST *ppInterfaceList){#if GET_IF_ENTRY2_IMPLEMENTED DWORD dwNumInterfaces; DWORD dwResult, dwSize; DWORD dwIndex; MIB_IF_ROW2 IfRow; PWLAN_INTERFACE_INFO_LIST InterfaceList;
dwResult = GetNumberOfInterfaces(&dwNumInterfaces); dwSize = sizeof(WLAN_INTERFACE_INFO_LIST); if (dwResult != NO_ERROR) { /* set num interfaces to zero when an error occurs */ dwNumInterfaces = 0; } else { if (dwNumInterfaces > 1) { /* add extra size for interface */ dwSize += (dwNumInterfaces-1) * sizeof(WLAN_INTERFACE_INFO); } }
/* allocate interface list */ InterfaceList = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwSize); if (!InterfaceList) { return ERROR_NOT_ENOUGH_MEMORY; }
*ppInterfaceList = InterfaceList; if (!dwNumInterfaces) { return ERROR_SUCCESS; }
for(dwIndex = 0; dwIndex < dwNumInterfaces; dwIndex++) { ZeroMemory(&IfRow, sizeof(MIB_IF_ROW2)); IfRow.InterfaceIndex = dwIndex;
dwResult = GetIfEntry2(&IfRow); if (dwResult == NO_ERROR) { if (IfRow.Type == IF_TYPE_IEEE80211 && IfRow.InterfaceAndOperStatusFlags.HardwareInterface) { RtlMoveMemory(&InterfaceList->InterfaceInfo[InterfaceList->dwNumberOfItems].InterfaceGuid, &IfRow.InterfaceGuid, sizeof(GUID)); wcscpy(InterfaceList->InterfaceInfo[InterfaceList->dwNumberOfItems].strInterfaceDescription, IfRow.Description); //FIXME set state InterfaceList->dwNumberOfItems++; } } }
return ERROR_SUCCESS;#else UNIMPLEMENTED; return ERROR_CALL_NOT_IMPLEMENTED;#endif}
DWORD _RpcSetAutoConfigParameter( WLANSVC_RPC_HANDLE hClientHandle, long OpCode, DWORD dwDataSize, LPBYTE pData){ UNIMPLEMENTED; return ERROR_CALL_NOT_IMPLEMENTED;}
DWORD _RpcQueryAutoConfigParameter( WLANSVC_RPC_HANDLE hClientHandle, DWORD OpCode, LPDWORD pdwDataSize, char **ppData, DWORD *pWlanOpcodeValueType){ UNIMPLEMENTED; return ERROR_CALL_NOT_IMPLEMENTED;}
DWORD _RpcGetInterfaceCapability( WLANSVC_RPC_HANDLE hClientHandle, const GUID *pInterfaceGuid, PWLAN_INTERFACE_CAPABILITY *ppCapability){ PWLANSVCHANDLE lpWlanSvcHandle;
lpWlanSvcHandle = WlanSvcGetHandleEntry(hClientHandle); if (!lpWlanSvcHandle) { return ERROR_INVALID_HANDLE; }
UNIMPLEMENTED; return ERROR_CALL_NOT_IMPLEMENTED;}
DWORD _RpcSetInterface( WLANSVC_RPC_HANDLE hClientHandle, const GUID *pInterfaceGuid, DWORD OpCode, DWORD dwDataSize, LPBYTE pData){ UNIMPLEMENTED; return ERROR_CALL_NOT_IMPLEMENTED;}
DWORD _RpcQueryInterface( WLANSVC_RPC_HANDLE hClientHandle, const GUID *pInterfaceGuid, long OpCode, LPDWORD pdwDataSize, LPBYTE *ppData, LPDWORD pWlanOpcodeValueType){ UNIMPLEMENTED; return ERROR_CALL_NOT_IMPLEMENTED;}
DWORD _RpcIhvControl( WLANSVC_RPC_HANDLE hClientHandle, const GUID *pInterfaceGuid, DWORD Type, DWORD dwInBufferSize, LPBYTE pInBuffer, DWORD dwOutBufferSize, LPBYTE pOutBuffer, LPDWORD pdwBytesReturned){ UNIMPLEMENTED; return ERROR_CALL_NOT_IMPLEMENTED;}
DWORD _RpcScan( WLANSVC_RPC_HANDLE hClientHandle, const GUID *pInterfaceGuid, PDOT11_SSID pDot11Ssid, PWLAN_RAW_DATA pIeData){ PWLANSVCHANDLE lpWlanSvcHandle;
lpWlanSvcHandle = WlanSvcGetHandleEntry(hClientHandle); if (!lpWlanSvcHandle) { return ERROR_INVALID_HANDLE; }
/* DWORD dwBytesReturned; HANDLE hDevice; ULONG OidCode = OID_802_11_BSSID_LIST_SCAN; PNDIS_802_11_BSSID_LIST pBssIDList;
DeviceIoControl(hDevice, IOCTL_NDIS_QUERY_GLOBAL_STATS, &OidCode, sizeof(ULONG), NULL, 0, &dwBytesReturned, NULL);*/ UNIMPLEMENTED; return ERROR_CALL_NOT_IMPLEMENTED;}
DWORD _RpcGetAvailableNetworkList( WLANSVC_RPC_HANDLE hClientHandle, const GUID *pInterfaceGuid, DWORD dwFlags, WLAN_AVAILABLE_NETWORK_LIST **ppAvailableNetworkList){ UNIMPLEMENTED; return ERROR_CALL_NOT_IMPLEMENTED;}
DWORD _RpcGetNetworkBssList( WLANSVC_RPC_HANDLE hClientHandle, const GUID *pInterfaceGuid, PDOT11_SSID pDot11Ssid, short dot11BssType, DWORD bSecurityEnabled, LPDWORD dwBssListSize, LPBYTE *ppWlanBssList){ UNIMPLEMENTED; return ERROR_CALL_NOT_IMPLEMENTED;}
DWORD _RpcConnect( WLANSVC_RPC_HANDLE hClientHandle, const GUID *pInterfaceGuid, const PWLAN_CONNECTION_PARAMETERS *pConnectionParameters){ UNIMPLEMENTED; return ERROR_CALL_NOT_IMPLEMENTED;}
DWORD _RpcDisconnect( WLANSVC_RPC_HANDLE hClientHandle, const GUID *pInterfaceGUID){ UNIMPLEMENTED; return ERROR_CALL_NOT_IMPLEMENTED;}
DWORD _RpcRegisterNotification( WLANSVC_RPC_HANDLE hClientHandle, DWORD arg_2, LPDWORD pdwPrevNotifSource){ UNIMPLEMENTED; return ERROR_CALL_NOT_IMPLEMENTED;}
DWORD _RpcAsyncGetNotification( WLANSVC_RPC_HANDLE hClientHandle, PWLAN_NOTIFICATION_DATA *NotificationData){ UNIMPLEMENTED; return ERROR_CALL_NOT_IMPLEMENTED;}
DWORD _RpcSetProfileEapUserData( WLANSVC_RPC_HANDLE hClientHandle, const GUID *pInterfaceGuid, wchar_t *strProfileName, EAP_METHOD_TYPE MethodType, DWORD dwFlags, DWORD dwEapUserDataSize, LPBYTE pbEapUserData){ UNIMPLEMENTED; return ERROR_CALL_NOT_IMPLEMENTED;}
DWORD _RpcSetProfile( WLANSVC_RPC_HANDLE hClientHandle, const GUID *pInterfaceGuid, DWORD dwFlags, wchar_t *strProfileXml, wchar_t *strAllUserProfileSecurity, BOOL bOverwrite, LPDWORD pdwReasonCode){ UNIMPLEMENTED; return ERROR_CALL_NOT_IMPLEMENTED;}
DWORD _RpcGetProfile( WLANSVC_RPC_HANDLE hClientHandle, const GUID *pInterfaceGuid, wchar_t *strProfileName, wchar_t **pstrProfileXml, LPDWORD pdwFlags, LPDWORD pdwGrantedAccess){ UNIMPLEMENTED; return ERROR_CALL_NOT_IMPLEMENTED;}
DWORD _RpcDeleteProfile( WLANSVC_RPC_HANDLE hClientHandle, const GUID *pInterfaceGuid, const wchar_t *strProfileName){ UNIMPLEMENTED; return ERROR_CALL_NOT_IMPLEMENTED;}
DWORD _RpcRenameProfile( WLANSVC_RPC_HANDLE hClientHandle, const GUID *pInterfaceGuid, const wchar_t *strOldProfileName, const wchar_t *strNewProfileName){ UNIMPLEMENTED; return ERROR_CALL_NOT_IMPLEMENTED;}
DWORD _RpcSetProfileList( WLANSVC_RPC_HANDLE hClientHandle, const GUID *pInterfaceGuid, DWORD dwItems, BYTE **strProfileNames){ UNIMPLEMENTED; return ERROR_CALL_NOT_IMPLEMENTED;}
DWORD _RpcGetProfileList( WLANSVC_RPC_HANDLE hClientHandle, const GUID *pInterfaceGuid, PWLAN_PROFILE_INFO_LIST *ppProfileList){ UNIMPLEMENTED; return ERROR_CALL_NOT_IMPLEMENTED;}
DWORD _RpcSetProfilePosition( WLANSVC_RPC_HANDLE hClientHandle, const GUID *pInterfaceGuid, wchar_t *strProfileName, DWORD dwPosition){ UNIMPLEMENTED; return ERROR_CALL_NOT_IMPLEMENTED;}
DWORD _RpcSetProfileCustomUserData( WLANSVC_RPC_HANDLE hClientHandle, const GUID *pInterfaceGuid, wchar_t *strProfileName, DWORD dwDataSize, LPBYTE pData){ UNIMPLEMENTED; return ERROR_CALL_NOT_IMPLEMENTED;}
DWORD _RpcGetProfileCustomUserData( WLANSVC_RPC_HANDLE hClientHandle, const GUID *pInterfaceGuid, wchar_t *strProfileName, LPDWORD dwDataSize, LPBYTE *pData){ UNIMPLEMENTED; return ERROR_CALL_NOT_IMPLEMENTED;}
DWORD _RpcSetFilterList( WLANSVC_RPC_HANDLE hClientHandle, short wlanFilterListType, PDOT11_NETWORK_LIST pNetworkList){ UNIMPLEMENTED; return ERROR_CALL_NOT_IMPLEMENTED;}
DWORD _RpcGetFilterList( WLANSVC_RPC_HANDLE hClientHandle, short wlanFilterListType, PDOT11_NETWORK_LIST *pNetworkList){ UNIMPLEMENTED; return ERROR_CALL_NOT_IMPLEMENTED;}
DWORD _RpcSetPsdIEDataList( WLANSVC_RPC_HANDLE hClientHandle, wchar_t *strFormat, DWORD dwDataListSize, LPBYTE pPsdIEDataList){ UNIMPLEMENTED; return ERROR_CALL_NOT_IMPLEMENTED;}
DWORD _RpcSaveTemporaryProfile( WLANSVC_RPC_HANDLE hClientHandle, const GUID *pInterfaceGuid, wchar_t *strProfileName, wchar_t *strAllUserProfileSecurity, DWORD dwFlags, BOOL bOverWrite){ UNIMPLEMENTED; return ERROR_CALL_NOT_IMPLEMENTED;}
DWORD _RpcIsUIRequestPending( wchar_t *arg_1, const GUID *pInterfaceGuid, struct_C *arg_3, LPDWORD arg_4){ UNIMPLEMENTED; return ERROR_CALL_NOT_IMPLEMENTED;}
DWORD _RpcSetUIForwardingNetworkList( wchar_t *arg_1, GUID *arg_2, DWORD dwSize, GUID *arg_4){ UNIMPLEMENTED; return ERROR_CALL_NOT_IMPLEMENTED;}
DWORD _RpcIsNetworkSuppressed( wchar_t *arg_1, DWORD arg_2, const GUID *pInterfaceGuid, LPDWORD arg_4){ UNIMPLEMENTED; return ERROR_CALL_NOT_IMPLEMENTED;}
DWORD _RpcRemoveUIForwardingNetworkList( wchar_t *arg_1, const GUID *pInterfaceGuid){ UNIMPLEMENTED; return ERROR_CALL_NOT_IMPLEMENTED;}
DWORD _RpcQueryExtUIRequest( wchar_t *arg_1, GUID *arg_2, GUID *arg_3, short arg_4, GUID *pInterfaceGuid, struct_C **arg_6){ UNIMPLEMENTED; return ERROR_CALL_NOT_IMPLEMENTED;}
DWORD _RpcUIResponse( wchar_t *arg_1, struct_C *arg_2, struct_D *arg_3){ UNIMPLEMENTED; return ERROR_CALL_NOT_IMPLEMENTED;}
DWORD _RpcGetProfileKeyInfo( wchar_t *arg_1, DWORD arg_2, const GUID *pInterfaceGuid, wchar_t *arg_4, DWORD arg_5, LPDWORD arg_6, char *arg_7, LPDWORD arg_8){ UNIMPLEMENTED; return ERROR_CALL_NOT_IMPLEMENTED;}
DWORD _RpcAsyncDoPlap( wchar_t *arg_1, const GUID *pInterfaceGuid, wchar_t *arg_3, DWORD dwSize, struct_E arg_5[]){ UNIMPLEMENTED; return ERROR_CALL_NOT_IMPLEMENTED;}
DWORD _RpcQueryPlapCredentials( wchar_t *arg_1, LPDWORD dwSize, struct_E **arg_3, wchar_t **arg_4, GUID *pInterfaceGuid, LPDWORD arg_6, LPDWORD arg_7, LPDWORD arg_8, LPDWORD arg_9){ UNIMPLEMENTED; return ERROR_CALL_NOT_IMPLEMENTED;}
DWORD _RpcCancelPlap( wchar_t *arg_1, const GUID *pInterfaceGuid){ UNIMPLEMENTED; return ERROR_CALL_NOT_IMPLEMENTED;}
DWORD _RpcSetSecuritySettings( WLANSVC_RPC_HANDLE hClientHandle, WLAN_SECURABLE_OBJECT SecurableObject, const wchar_t *strModifiedSDDL){ UNIMPLEMENTED; return ERROR_CALL_NOT_IMPLEMENTED;}
DWORD _RpcGetSecuritySettings( WLANSVC_RPC_HANDLE hClientHandle, WLAN_SECURABLE_OBJECT SecurableObject, WLAN_OPCODE_VALUE_TYPE *pValueType, wchar_t **pstrCurrentSDDL, LPDWORD pdwGrantedAccess){ UNIMPLEMENTED; return ERROR_CALL_NOT_IMPLEMENTED;}
void __RPC_FAR * __RPC_USER midl_user_allocate(SIZE_T len){ return HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, len);}
void __RPC_USER midl_user_free(void __RPC_FAR * ptr){ HeapFree(GetProcessHeap(), 0, ptr);}
void __RPC_USER WLANSVC_RPC_HANDLE_rundown(WLANSVC_RPC_HANDLE hClientHandle){}