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.

255 lines
8.3 KiB

  1. #include <precomp.h>
  2. #include "ErrCtrl.h"
  3. #include "Utils.h"
  4. #include "Output.h"
  5. //------------------------------------------------------
  6. // Output utility routine for printing the BSSID
  7. // NOTE: This routine shouldn't be called from multithreaded apps.
  8. // WZCTOOL is far from being multithreaded though!
  9. LPWSTR
  10. OutBssid(PPARAM_DESCR_DATA pPDData, PNDIS_802_11_MAC_ADDRESS pndBssid)
  11. {
  12. static WCHAR wszBssid[32];
  13. if (pndBssid == NULL)
  14. wcscpy(wszBssid, L"#Err#");
  15. else
  16. wsprintf(wszBssid,L"%02x:%02x:%02x:%02x:%02x:%02x",
  17. (*pndBssid)[0], (*pndBssid)[1], (*pndBssid)[2], (*pndBssid)[3], (*pndBssid)[4], (*pndBssid)[5]);
  18. return wszBssid;
  19. }
  20. //------------------------------------------------------
  21. // Output utility routine for printing the SSID
  22. // NOTE: This routine shouldn't be called from multithreaded apps.
  23. // WZCTOOL is far from being multithreaded though!
  24. LPWSTR
  25. OutSsid(PPARAM_DESCR_DATA pPDData, PNDIS_802_11_SSID pndSsid)
  26. {
  27. static WCHAR wszSsid[64];
  28. if (pndSsid == NULL)
  29. wcscpy(wszSsid, L"#Err#");
  30. else
  31. {
  32. if (pndSsid->SsidLength >= 32)
  33. {
  34. wsprintf(wszSsid, L"[%d] #Err#", pndSsid->SsidLength);
  35. }
  36. else
  37. {
  38. CHAR szSsid[33];
  39. memcpy(szSsid, pndSsid->Ssid, pndSsid->SsidLength);
  40. szSsid[pndSsid->SsidLength] = '\0';
  41. wsprintf(wszSsid, L"[%d] %S", pndSsid->SsidLength, szSsid);
  42. }
  43. }
  44. return wszSsid;
  45. }
  46. //------------------------------------------------------
  47. // Output routine for a wireless network configuration (visible or preferred)
  48. DWORD
  49. OutNetworkConfig(PPARAM_DESCR_DATA pPDData, PWZC_WLAN_CONFIG pwzcConfig)
  50. {
  51. DWORD dwErr = ERROR_SUCCESS;
  52. if (pwzcConfig == NULL)
  53. dwErr = ERROR_GEN_FAILURE;
  54. else
  55. {
  56. CHAR szLine[120];
  57. UINT nIdx;
  58. memset(szLine,' ', 120);
  59. nIdx = sprintf(szLine, "%S", OutSsid(pPDData, &pwzcConfig->Ssid));
  60. szLine[nIdx] = ' ';
  61. nIdx += 36 - (nIdx%36);
  62. if (pPDData->dwExistingParams & PRM_VISIBLE)
  63. {
  64. nIdx += sprintf(szLine+nIdx, "%S", OutBssid(pPDData, &pwzcConfig->MacAddress));
  65. szLine[nIdx] = ' ';
  66. nIdx += 2;
  67. }
  68. nIdx += sprintf(szLine+nIdx, "im=%d", pwzcConfig->InfrastructureMode);
  69. szLine[nIdx] = ' ';
  70. nIdx += 8 - (nIdx%8);
  71. nIdx += sprintf(szLine+nIdx, "am=%d", pwzcConfig->AuthenticationMode);
  72. szLine[nIdx] = ' ';
  73. nIdx += 8 - (nIdx%8);
  74. // for XP SP, the meaning of this field is boolean!
  75. nIdx += sprintf(szLine+nIdx, "priv=%d", pwzcConfig->Privacy ? Ndis802_11WEPEnabled : Ndis802_11WEPDisabled);
  76. if (pPDData->dwExistingParams & PRM_PREFERRED)
  77. {
  78. szLine[nIdx] = ' ';
  79. nIdx += 8 - (nIdx%8);
  80. if (pwzcConfig->dwCtlFlags & WZCCTL_WEPK_PRESENT)
  81. nIdx += sprintf(szLine+nIdx, "key=%d", pwzcConfig->KeyIndex + 1);
  82. else
  83. nIdx += sprintf(szLine+nIdx, "key=?");
  84. }
  85. fprintf(pPDData->pfOut, "%s\n",szLine);
  86. }
  87. SetLastError(dwErr);
  88. return dwErr;
  89. }
  90. //======================================================
  91. // Public routines
  92. //------------------------------------------------------
  93. // Output header for the case of a multiplied command (applying to * interfaces)
  94. DWORD
  95. OutIntfsHeader(PPARAM_DESCR_DATA pPDData)
  96. {
  97. fwprintf(pPDData->pfOut, L"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~%s\n", pPDData->wzcIntfEntry.wszGuid);
  98. SetLastError(ERROR_SUCCESS);
  99. return ERROR_SUCCESS;
  100. }
  101. //------------------------------------------------------
  102. // Output trailer for the case of a multiplied command (applying to * interfaces)
  103. DWORD
  104. OutIntfsTrailer(PPARAM_DESCR_DATA pPDData, DWORD dwErr)
  105. {
  106. fwprintf(pPDData->pfOut, L"____________________________________Completed with code %d\n", dwErr);
  107. SetLastError(ERROR_SUCCESS);
  108. return ERROR_SUCCESS;
  109. }
  110. //------------------------------------------------------
  111. // Output routine for the list of wireless interfaces
  112. DWORD
  113. OutNetworkIntfs(PPARAM_DESCR_DATA pPDData, PINTFS_KEY_TABLE pIntfTable)
  114. {
  115. DWORD dwErr = ERROR_SUCCESS;
  116. UINT i;
  117. if (pIntfTable == NULL)
  118. dwErr = ERROR_INVALID_PARAMETER;
  119. else
  120. {
  121. for (i = 0; i < pIntfTable->dwNumIntfs; i++)
  122. {
  123. fwprintf(pPDData->pfOut, L"[%d] %s\n", i, pIntfTable->pIntfs[i].wszGuid);
  124. }
  125. }
  126. SetLastError(dwErr);
  127. return dwErr;
  128. }
  129. //------------------------------------------------------
  130. // Output routine for the generic service WZC parameters (flags are Os specific)
  131. DWORD
  132. OutSvcParams(PPARAM_DESCR_DATA pPDData, DWORD dwOsInFlags, DWORD dwOsOutFlags)
  133. {
  134. DWORD dwErr = ERROR_SUCCESS;
  135. if (dwOsInFlags & _Os(INTF_CM_MASK))
  136. {
  137. fprintf(pPDData->pfOut, "Mask : ");
  138. if (dwOsOutFlags & _Os(INTF_CM_MASK))
  139. fprintf(pPDData->pfOut, "%d\n",pPDData->wzcIntfEntry.dwCtlFlags & INTFCTL_CM_MASK);
  140. else
  141. fprintf(pPDData->pfOut, "#Err#\n");
  142. }
  143. if (dwOsInFlags & _Os(INTF_ENABLED))
  144. {
  145. fprintf(pPDData->pfOut, "Enabled : ");
  146. if (dwOsOutFlags & _Os(INTF_ENABLED))
  147. fprintf(pPDData->pfOut, "%d\n", pPDData->wzcIntfEntry.dwCtlFlags & INTF_ENABLED ? 1 : 0);
  148. else
  149. fprintf(pPDData->pfOut, "#Err#\n");
  150. }
  151. if (dwOsInFlags & _Os(INTF_SSID))
  152. {
  153. fprintf(pPDData->pfOut, "SSID : ");
  154. if (dwOsOutFlags & _Os(INTF_SSID))
  155. {
  156. NDIS_802_11_SSID Ssid = {0};
  157. Ssid.SsidLength = pPDData->wzcIntfEntry.rdSSID.dwDataLen;
  158. if (Ssid.SsidLength <= 32)
  159. memcpy(Ssid.Ssid, pPDData->wzcIntfEntry.rdSSID.pData, Ssid.SsidLength);
  160. fprintf(pPDData->pfOut, "%S\n", OutSsid(pPDData, &Ssid));
  161. }
  162. else
  163. fprintf(pPDData->pfOut, "#Err#\n");
  164. }
  165. if (dwOsInFlags & _Os(INTF_BSSID))
  166. {
  167. fprintf(pPDData->pfOut, "BSSID : ");
  168. if (dwOsOutFlags & _Os(INTF_BSSID))
  169. fprintf(pPDData->pfOut, "%S\n", OutBssid(pPDData, (PNDIS_802_11_MAC_ADDRESS)pPDData->wzcIntfEntry.rdBSSID.pData));
  170. else
  171. fprintf(pPDData->pfOut, "#Err#\n");
  172. }
  173. if (dwOsInFlags & _Os(INTF_INFRAMODE))
  174. {
  175. fprintf(pPDData->pfOut, "Infra Mode : ");
  176. if (dwOsOutFlags & _Os(INTF_INFRAMODE))
  177. fprintf(pPDData->pfOut, "%d\n", pPDData->wzcIntfEntry.nInfraMode);
  178. else
  179. fprintf(pPDData->pfOut, "#Err#\n");
  180. }
  181. if (dwOsInFlags & _Os(INTF_AUTHMODE))
  182. {
  183. fprintf(pPDData->pfOut, "Auth Mode : ");
  184. if (dwOsOutFlags & _Os(INTF_AUTHMODE))
  185. fprintf(pPDData->pfOut, "%d\n", pPDData->wzcIntfEntry.nAuthMode);
  186. else
  187. fprintf(pPDData->pfOut, "#Err#\n");
  188. }
  189. if (dwOsInFlags & _Os(INTF_WEPSTATUS))
  190. {
  191. fprintf(pPDData->pfOut, "Privacy : ");
  192. if (dwOsOutFlags & _Os(INTF_WEPSTATUS))
  193. fprintf(pPDData->pfOut, "%d\n", pPDData->wzcIntfEntry.nWepStatus);
  194. else
  195. fprintf(pPDData->pfOut, "#Err#\n");
  196. }
  197. SetLastError(dwErr);
  198. return dwErr;
  199. }
  200. //------------------------------------------------------
  201. // Output routine for a list of wireless networks (visible or preferred)
  202. DWORD
  203. OutNetworkCfgList(PPARAM_DESCR_DATA pPDData, UINT nRetrieved, UINT nFiltered)
  204. {
  205. DWORD dwErr = ERROR_SUCCESS;
  206. UINT i;
  207. PWZC_802_11_CONFIG_LIST pwzcCfgList;
  208. if (pPDData->dwExistingParams & PRM_VISIBLE)
  209. {
  210. pwzcCfgList = (PWZC_802_11_CONFIG_LIST)pPDData->wzcIntfEntry.rdBSSIDList.pData;
  211. fprintf(pPDData->pfOut, "Visible networks: ");
  212. }
  213. else
  214. {
  215. pwzcCfgList = (PWZC_802_11_CONFIG_LIST)pPDData->wzcIntfEntry.rdStSSIDList.pData;
  216. fprintf(pPDData->pfOut, "Preferred networks: ");
  217. }
  218. fprintf(pPDData->pfOut, "retrieved %d - filtered %d.\n------------------------------------\n", nRetrieved, nFiltered);
  219. if (pwzcCfgList != NULL)
  220. {
  221. for (i = 0; dwErr == ERROR_SUCCESS && i < pwzcCfgList->NumberOfItems; i++)
  222. {
  223. PWZC_WLAN_CONFIG pwzcConfig = &pwzcCfgList->Config[i];
  224. dwErr = OutNetworkConfig(pPDData, pwzcConfig);
  225. }
  226. }
  227. SetLastError(dwErr);
  228. return dwErr;
  229. }