2 * PROJECT: ReactOS WLAN Service
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: base/services/wlansvc/rpcserver.c
5 * PURPOSE: RPC server interface
6 * COPYRIGHT: Copyright 2009 Christoph von Wittich
13 //#define GET_IF_ENTRY2_IMPLEMENTED 1
15 LIST_ENTRY WlanSvcHandleListHead
;
17 DWORD WINAPI
RpcThreadRoutine(LPVOID lpParameter
)
21 InitializeListHead(&WlanSvcHandleListHead
);
23 Status
= RpcServerUseProtseqEpW(L
"ncalrpc", 20, L
"wlansvc", NULL
);
24 if (Status
!= RPC_S_OK
)
26 DPRINT("RpcServerUseProtseqEpW() failed (Status %lx)\n", Status
);
30 Status
= RpcServerRegisterIf(wlansvc_interface_v1_0_s_ifspec
, NULL
, NULL
);
31 if (Status
!= RPC_S_OK
)
33 DPRINT("RpcServerRegisterIf() failed (Status %lx)\n", Status
);
37 Status
= RpcServerListen(1, RPC_C_LISTEN_MAX_CALLS_DEFAULT
, 0);
38 if (Status
!= RPC_S_OK
)
40 DPRINT("RpcServerListen() failed (Status %lx)\n", Status
);
43 DPRINT("RpcServerListen finished\n");
47 PWLANSVCHANDLE
WlanSvcGetHandleEntry(LPWLANSVC_RPC_HANDLE ClientHandle
)
49 PLIST_ENTRY CurrentEntry
;
50 PWLANSVCHANDLE lpWlanSvcHandle
;
52 CurrentEntry
= WlanSvcHandleListHead
.Flink
;
53 while (CurrentEntry
!= &WlanSvcHandleListHead
)
55 lpWlanSvcHandle
= CONTAINING_RECORD(CurrentEntry
,
57 WlanSvcHandleListEntry
);
58 CurrentEntry
= CurrentEntry
->Flink
;
60 if (lpWlanSvcHandle
== (PWLANSVCHANDLE
) ClientHandle
)
61 return lpWlanSvcHandle
;
69 DWORD dwClientVersion
,
70 DWORD
*pdwNegotiatedVersion
,
71 LPWLANSVC_RPC_HANDLE phClientHandle
)
73 PWLANSVCHANDLE lpWlanSvcHandle
;
75 lpWlanSvcHandle
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(WLANSVCHANDLE
));
76 if (lpWlanSvcHandle
== NULL
)
78 DPRINT1("Failed to allocate Heap!\n");
79 return ERROR_NOT_ENOUGH_MEMORY
;
82 if (dwClientVersion
> 2)
85 if (dwClientVersion
< 1)
88 lpWlanSvcHandle
->dwClientVersion
= dwClientVersion
;
89 *pdwNegotiatedVersion
= dwClientVersion
;
91 InsertTailList(&WlanSvcHandleListHead
, &lpWlanSvcHandle
->WlanSvcHandleListEntry
);
92 *phClientHandle
= lpWlanSvcHandle
;
97 DWORD
_RpcCloseHandle(
98 LPWLANSVC_RPC_HANDLE phClientHandle
)
100 PWLANSVCHANDLE lpWlanSvcHandle
;
102 lpWlanSvcHandle
= WlanSvcGetHandleEntry(*phClientHandle
);
103 if (!lpWlanSvcHandle
)
105 return ERROR_INVALID_HANDLE
;
108 RemoveEntryList(&lpWlanSvcHandle
->WlanSvcHandleListEntry
);
109 HeapFree(GetProcessHeap(), 0, lpWlanSvcHandle
);
111 return ERROR_SUCCESS
;
114 DWORD
_RpcEnumInterfaces(
115 WLANSVC_RPC_HANDLE hClientHandle
,
116 PWLAN_INTERFACE_INFO_LIST
*ppInterfaceList
)
118 #if GET_IF_ENTRY2_IMPLEMENTED
119 DWORD dwNumInterfaces
;
120 DWORD dwResult
, dwSize
;
123 PWLAN_INTERFACE_INFO_LIST InterfaceList
;
125 dwResult
= GetNumberOfInterfaces(&dwNumInterfaces
);
126 dwSize
= sizeof(WLAN_INTERFACE_INFO_LIST
);
127 if (dwResult
!= NO_ERROR
)
129 /* set num interfaces to zero when an error occurs */
134 if (dwNumInterfaces
> 1)
136 /* add extra size for interface */
137 dwSize
+= (dwNumInterfaces
-1) * sizeof(WLAN_INTERFACE_INFO
);
141 /* allocate interface list */
142 InterfaceList
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, dwSize
);
145 return ERROR_NOT_ENOUGH_MEMORY
;
148 *ppInterfaceList
= InterfaceList
;
149 if (!dwNumInterfaces
)
151 return ERROR_SUCCESS
;
154 for(dwIndex
= 0; dwIndex
< dwNumInterfaces
; dwIndex
++)
156 ZeroMemory(&IfRow
, sizeof(MIB_IF_ROW2
));
157 IfRow
.InterfaceIndex
= dwIndex
;
159 dwResult
= GetIfEntry2(&IfRow
);
160 if (dwResult
== NO_ERROR
)
162 if (IfRow
.Type
== IF_TYPE_IEEE80211
&& IfRow
.InterfaceAndOperStatusFlags
.HardwareInterface
)
164 RtlMoveMemory(&InterfaceList
->InterfaceInfo
[InterfaceList
->dwNumberOfItems
].InterfaceGuid
, &IfRow
.InterfaceGuid
, sizeof(GUID
));
165 wcscpy(InterfaceList
->InterfaceInfo
[InterfaceList
->dwNumberOfItems
].strInterfaceDescription
, IfRow
.Description
);
167 InterfaceList
->dwNumberOfItems
++;
172 return ERROR_SUCCESS
;
175 return ERROR_CALL_NOT_IMPLEMENTED
;
179 DWORD
_RpcSetAutoConfigParameter(
180 WLANSVC_RPC_HANDLE hClientHandle
,
186 return ERROR_CALL_NOT_IMPLEMENTED
;
189 DWORD
_RpcQueryAutoConfigParameter(
190 WLANSVC_RPC_HANDLE hClientHandle
,
194 DWORD
*pWlanOpcodeValueType
)
197 return ERROR_CALL_NOT_IMPLEMENTED
;
200 DWORD
_RpcGetInterfaceCapability(
201 WLANSVC_RPC_HANDLE hClientHandle
,
202 const GUID
*pInterfaceGuid
,
203 PWLAN_INTERFACE_CAPABILITY
*ppCapability
)
205 PWLANSVCHANDLE lpWlanSvcHandle
;
207 lpWlanSvcHandle
= WlanSvcGetHandleEntry(hClientHandle
);
208 if (!lpWlanSvcHandle
)
210 return ERROR_INVALID_HANDLE
;
214 return ERROR_CALL_NOT_IMPLEMENTED
;
217 DWORD
_RpcSetInterface(
218 WLANSVC_RPC_HANDLE hClientHandle
,
219 const GUID
*pInterfaceGuid
,
225 return ERROR_CALL_NOT_IMPLEMENTED
;
228 DWORD
_RpcQueryInterface(
229 WLANSVC_RPC_HANDLE hClientHandle
,
230 const GUID
*pInterfaceGuid
,
234 LPDWORD pWlanOpcodeValueType
)
237 return ERROR_CALL_NOT_IMPLEMENTED
;
240 DWORD
_RpcIhvControl(
241 WLANSVC_RPC_HANDLE hClientHandle
,
242 const GUID
*pInterfaceGuid
,
244 DWORD dwInBufferSize
,
246 DWORD dwOutBufferSize
,
248 LPDWORD pdwBytesReturned
)
251 return ERROR_CALL_NOT_IMPLEMENTED
;
255 WLANSVC_RPC_HANDLE hClientHandle
,
256 const GUID
*pInterfaceGuid
,
257 PDOT11_SSID pDot11Ssid
,
258 PWLAN_RAW_DATA pIeData
)
260 PWLANSVCHANDLE lpWlanSvcHandle
;
262 lpWlanSvcHandle
= WlanSvcGetHandleEntry(hClientHandle
);
263 if (!lpWlanSvcHandle
)
265 return ERROR_INVALID_HANDLE
;
269 DWORD dwBytesReturned;
271 ULONG OidCode = OID_802_11_BSSID_LIST_SCAN;
272 PNDIS_802_11_BSSID_LIST pBssIDList;
274 DeviceIoControl(hDevice,
275 IOCTL_NDIS_QUERY_GLOBAL_STATS,
284 return ERROR_CALL_NOT_IMPLEMENTED
;
287 DWORD
_RpcGetAvailableNetworkList(
288 WLANSVC_RPC_HANDLE hClientHandle
,
289 const GUID
*pInterfaceGuid
,
291 WLAN_AVAILABLE_NETWORK_LIST
**ppAvailableNetworkList
)
294 return ERROR_CALL_NOT_IMPLEMENTED
;
297 DWORD
_RpcGetNetworkBssList(
298 WLANSVC_RPC_HANDLE hClientHandle
,
299 const GUID
*pInterfaceGuid
,
300 PDOT11_SSID pDot11Ssid
,
302 DWORD bSecurityEnabled
,
303 LPDWORD dwBssListSize
,
304 LPBYTE
*ppWlanBssList
)
307 return ERROR_CALL_NOT_IMPLEMENTED
;
311 WLANSVC_RPC_HANDLE hClientHandle
,
312 const GUID
*pInterfaceGuid
,
313 const PWLAN_CONNECTION_PARAMETERS
*pConnectionParameters
)
316 return ERROR_CALL_NOT_IMPLEMENTED
;
319 DWORD
_RpcDisconnect(
320 WLANSVC_RPC_HANDLE hClientHandle
,
321 const GUID
*pInterfaceGUID
)
324 return ERROR_CALL_NOT_IMPLEMENTED
;
327 DWORD
_RpcRegisterNotification(
328 WLANSVC_RPC_HANDLE hClientHandle
,
330 LPDWORD pdwPrevNotifSource
)
333 return ERROR_CALL_NOT_IMPLEMENTED
;
336 DWORD
_RpcAsyncGetNotification(
337 WLANSVC_RPC_HANDLE hClientHandle
,
338 PWLAN_NOTIFICATION_DATA
*NotificationData
)
341 return ERROR_CALL_NOT_IMPLEMENTED
;
344 DWORD
_RpcSetProfileEapUserData(
345 WLANSVC_RPC_HANDLE hClientHandle
,
346 const GUID
*pInterfaceGuid
,
347 wchar_t *strProfileName
,
348 EAP_METHOD_TYPE MethodType
,
350 DWORD dwEapUserDataSize
,
351 LPBYTE pbEapUserData
)
354 return ERROR_CALL_NOT_IMPLEMENTED
;
357 DWORD
_RpcSetProfile(
358 WLANSVC_RPC_HANDLE hClientHandle
,
359 const GUID
*pInterfaceGuid
,
361 wchar_t *strProfileXml
,
362 wchar_t *strAllUserProfileSecurity
,
364 LPDWORD pdwReasonCode
)
367 return ERROR_CALL_NOT_IMPLEMENTED
;
370 DWORD
_RpcGetProfile(
371 WLANSVC_RPC_HANDLE hClientHandle
,
372 const GUID
*pInterfaceGuid
,
373 wchar_t *strProfileName
,
374 wchar_t **pstrProfileXml
,
376 LPDWORD pdwGrantedAccess
)
379 return ERROR_CALL_NOT_IMPLEMENTED
;
382 DWORD
_RpcDeleteProfile(
383 WLANSVC_RPC_HANDLE hClientHandle
,
384 const GUID
*pInterfaceGuid
,
385 const wchar_t *strProfileName
)
388 return ERROR_CALL_NOT_IMPLEMENTED
;
391 DWORD
_RpcRenameProfile(
392 WLANSVC_RPC_HANDLE hClientHandle
,
393 const GUID
*pInterfaceGuid
,
394 const wchar_t *strOldProfileName
,
395 const wchar_t *strNewProfileName
)
398 return ERROR_CALL_NOT_IMPLEMENTED
;
401 DWORD
_RpcSetProfileList(
402 WLANSVC_RPC_HANDLE hClientHandle
,
403 const GUID
*pInterfaceGuid
,
405 BYTE
**strProfileNames
)
408 return ERROR_CALL_NOT_IMPLEMENTED
;
411 DWORD
_RpcGetProfileList(
412 WLANSVC_RPC_HANDLE hClientHandle
,
413 const GUID
*pInterfaceGuid
,
414 PWLAN_PROFILE_INFO_LIST
*ppProfileList
)
417 return ERROR_CALL_NOT_IMPLEMENTED
;
420 DWORD
_RpcSetProfilePosition(
421 WLANSVC_RPC_HANDLE hClientHandle
,
422 const GUID
*pInterfaceGuid
,
423 wchar_t *strProfileName
,
427 return ERROR_CALL_NOT_IMPLEMENTED
;
430 DWORD
_RpcSetProfileCustomUserData(
431 WLANSVC_RPC_HANDLE hClientHandle
,
432 const GUID
*pInterfaceGuid
,
433 wchar_t *strProfileName
,
438 return ERROR_CALL_NOT_IMPLEMENTED
;
441 DWORD
_RpcGetProfileCustomUserData(
442 WLANSVC_RPC_HANDLE hClientHandle
,
443 const GUID
*pInterfaceGuid
,
444 wchar_t *strProfileName
,
449 return ERROR_CALL_NOT_IMPLEMENTED
;
452 DWORD
_RpcSetFilterList(
453 WLANSVC_RPC_HANDLE hClientHandle
,
454 short wlanFilterListType
,
455 PDOT11_NETWORK_LIST pNetworkList
)
458 return ERROR_CALL_NOT_IMPLEMENTED
;
461 DWORD
_RpcGetFilterList(
462 WLANSVC_RPC_HANDLE hClientHandle
,
463 short wlanFilterListType
,
464 PDOT11_NETWORK_LIST
*pNetworkList
)
467 return ERROR_CALL_NOT_IMPLEMENTED
;
470 DWORD
_RpcSetPsdIEDataList(
471 WLANSVC_RPC_HANDLE hClientHandle
,
473 DWORD dwDataListSize
,
474 LPBYTE pPsdIEDataList
)
477 return ERROR_CALL_NOT_IMPLEMENTED
;
480 DWORD
_RpcSaveTemporaryProfile(
481 WLANSVC_RPC_HANDLE hClientHandle
,
482 const GUID
*pInterfaceGuid
,
483 wchar_t *strProfileName
,
484 wchar_t *strAllUserProfileSecurity
,
489 return ERROR_CALL_NOT_IMPLEMENTED
;
492 DWORD
_RpcIsUIRequestPending(
494 const GUID
*pInterfaceGuid
,
499 return ERROR_CALL_NOT_IMPLEMENTED
;
502 DWORD
_RpcSetUIForwardingNetworkList(
509 return ERROR_CALL_NOT_IMPLEMENTED
;
512 DWORD
_RpcIsNetworkSuppressed(
515 const GUID
*pInterfaceGuid
,
519 return ERROR_CALL_NOT_IMPLEMENTED
;
522 DWORD
_RpcRemoveUIForwardingNetworkList(
524 const GUID
*pInterfaceGuid
)
527 return ERROR_CALL_NOT_IMPLEMENTED
;
530 DWORD
_RpcQueryExtUIRequest(
535 GUID
*pInterfaceGuid
,
539 return ERROR_CALL_NOT_IMPLEMENTED
;
542 DWORD
_RpcUIResponse(
548 return ERROR_CALL_NOT_IMPLEMENTED
;
551 DWORD
_RpcGetProfileKeyInfo(
554 const GUID
*pInterfaceGuid
,
562 return ERROR_CALL_NOT_IMPLEMENTED
;
565 DWORD
_RpcAsyncDoPlap(
567 const GUID
*pInterfaceGuid
,
573 return ERROR_CALL_NOT_IMPLEMENTED
;
576 DWORD
_RpcQueryPlapCredentials(
581 GUID
*pInterfaceGuid
,
588 return ERROR_CALL_NOT_IMPLEMENTED
;
591 DWORD
_RpcCancelPlap(
593 const GUID
*pInterfaceGuid
)
596 return ERROR_CALL_NOT_IMPLEMENTED
;
599 DWORD
_RpcSetSecuritySettings(
600 WLANSVC_RPC_HANDLE hClientHandle
,
601 WLAN_SECURABLE_OBJECT SecurableObject
,
602 const wchar_t *strModifiedSDDL
)
605 return ERROR_CALL_NOT_IMPLEMENTED
;
608 DWORD
_RpcGetSecuritySettings(
609 WLANSVC_RPC_HANDLE hClientHandle
,
610 WLAN_SECURABLE_OBJECT SecurableObject
,
611 WLAN_OPCODE_VALUE_TYPE
*pValueType
,
612 wchar_t **pstrCurrentSDDL
,
613 LPDWORD pdwGrantedAccess
)
616 return ERROR_CALL_NOT_IMPLEMENTED
;
619 void __RPC_FAR
* __RPC_USER
midl_user_allocate(SIZE_T len
)
621 return HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, len
);
625 void __RPC_USER
midl_user_free(void __RPC_FAR
* ptr
)
627 HeapFree(GetProcessHeap(), 0, ptr
);
631 void __RPC_USER
WLANSVC_RPC_HANDLE_rundown(WLANSVC_RPC_HANDLE hClientHandle
)