Changeset 59742 in vbox for trunk/src/VBox/HostDrivers/VBoxNetFlt/win
- Timestamp:
- Feb 19, 2016 3:18:15 PM (9 years ago)
- svn:sync-xref-src-repo-rev:
- 105611
- Location:
- trunk/src/VBox/HostDrivers/VBoxNetFlt/win/drv
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetLwf-win.cpp
r59653 r59742 227 227 static int vboxNetLwfWinFini(); 228 228 229 /** 230 * Logs an error to the system event log. 231 * 232 * @param ErrCode Error to report to event log. 233 * @param ReturnedStatus Error that was reported by the driver to the caller. 234 * @param uErrId Unique error id representing the location in the driver. 235 * @param cbDumpData Number of bytes at pDumpData. 236 * @param pDumpData Pointer to data that will be added to the message (see 'details' tab). 237 */ 238 static void vboxNetLwfLogErrorEvent(NTSTATUS uErrCode, NTSTATUS uReturnedStatus, ULONG uErrId) 239 { 240 /* Figure out how many modules are attached and if they are going to fit into the dump data. */ 241 unsigned cMaxModules = (ERROR_LOG_MAXIMUM_SIZE - FIELD_OFFSET(IO_ERROR_LOG_PACKET, DumpData)) / sizeof(RTMAC); 242 unsigned cModules = 0; 243 PVBOXNETLWF_MODULE pModuleCtx = NULL; 244 NdisAcquireSpinLock(&g_VBoxNetLwfGlobals.Lock); 245 RTListForEach(&g_VBoxNetLwfGlobals.listModules, pModuleCtx, VBOXNETLWF_MODULE, node) 246 ++cModules; 247 NdisReleaseSpinLock(&g_VBoxNetLwfGlobals.Lock); 248 /* Prevent overflow */ 249 if (cModules > cMaxModules) 250 cModules = cMaxModules; 251 252 /* DumpDataSize must be a multiple of sizeof(ULONG). */ 253 unsigned cbDumpData = (cModules * sizeof(RTMAC) + 3) & ~3; 254 /* Prevent underflow */ 255 unsigned cbTotal = RT_MAX(FIELD_OFFSET(IO_ERROR_LOG_PACKET, DumpData) + cbDumpData, 256 sizeof(IO_ERROR_LOG_PACKET)); 257 258 PIO_ERROR_LOG_PACKET pErrEntry; 259 pErrEntry = (PIO_ERROR_LOG_PACKET)IoAllocateErrorLogEntry(g_VBoxNetLwfGlobals.pDevObj, 260 (UCHAR)cbTotal); 261 if (pErrEntry) 262 { 263 PRTMAC pDump = (PRTMAC)pErrEntry->DumpData; 264 /* 265 * Initialize the whole structure with zeros in case we are suddenly short 266 * of data because the list is empty or has become smaller. 267 */ 268 memset(pErrEntry, 0, cbTotal); 269 270 NdisAcquireSpinLock(&g_VBoxNetLwfGlobals.Lock); 271 RTListForEach(&g_VBoxNetLwfGlobals.listModules, pModuleCtx, VBOXNETLWF_MODULE, node) 272 { 273 /* The list could have been modified while we were allocating the entry, rely on cModules instead! */ 274 if (cModules-- == 0) 275 break; 276 *pDump++ = pModuleCtx->MacAddr; 277 } 278 NdisReleaseSpinLock(&g_VBoxNetLwfGlobals.Lock); 279 280 pErrEntry->DumpDataSize = cbDumpData; 281 pErrEntry->ErrorCode = uErrCode; 282 pErrEntry->UniqueErrorValue = uErrId; 283 pErrEntry->FinalStatus = uReturnedStatus; 284 IoWriteErrorLogEntry(pErrEntry); 285 } 286 else 287 { 288 DbgPrint("Failed to allocate error log entry (cb=%u)\n", cbTotal); 289 } 290 } 291 229 292 #ifdef DEBUG 230 293 static const char *vboxNetLwfWinStatusToText(NDIS_STATUS code) … … 779 842 780 843 PVBOXNETLWFGLOBALS pGlobals = (PVBOXNETLWFGLOBALS)hDriverCtx; 781 AssertReturn(pGlobals, NDIS_STATUS_FAILURE); 844 if (!pGlobals) 845 { 846 vboxNetLwfLogErrorEvent(IO_ERR_INTERNAL_ERROR, NDIS_STATUS_FAILURE, 1); 847 return NDIS_STATUS_FAILURE; 848 } 782 849 783 850 ANSI_STRING strMiniportName; … … 790 857 LogError(("vboxNetLwfWinAttach: RtlUnicodeStringToAnsiString(%ls) failed with 0x%x\n", 791 858 pParameters->BaseMiniportName, rc)); 859 vboxNetLwfLogErrorEvent(IO_ERR_INTERNAL_ERROR, NDIS_STATUS_FAILURE, 2); 792 860 return NDIS_STATUS_FAILURE; 793 861 } … … 804 872 LogError(("vboxNetLwfWinAttach: Failed to allocate module context for %ls\n", pParameters->BaseMiniportName)); 805 873 RtlFreeAnsiString(&strMiniportName); 874 vboxNetLwfLogErrorEvent(IO_ERR_INSUFFICIENT_RESOURCES, NDIS_STATUS_RESOURCES, 3); 806 875 return NDIS_STATUS_RESOURCES; 807 876 } … … 818 887 pParameters->BaseMiniportName)); 819 888 NdisFreeMemory(pModuleCtx, 0, 0); 889 vboxNetLwfLogErrorEvent(IO_ERR_INSUFFICIENT_RESOURCES, NDIS_STATUS_RESOURCES, 4); 820 890 return NDIS_STATUS_RESOURCES; 821 891 } … … 853 923 NdisFreeIoWorkItem(pModuleCtx->hWorkItem); 854 924 NdisFreeMemory(pModuleCtx, 0, 0); 925 vboxNetLwfLogErrorEvent(IO_ERR_INTERNAL_ERROR, NDIS_STATUS_RESOURCES, 5); 855 926 return NDIS_STATUS_RESOURCES; 856 927 } … … 2391 2462 } 2392 2463 NdisReleaseSpinLock(&g_VBoxNetLwfGlobals.Lock); 2464 vboxNetLwfLogErrorEvent(IO_ERR_INTERNAL_ERROR, STATUS_SUCCESS, 6); 2393 2465 LogFlow(("<==vboxNetFltOsInitInstance: return VERR_INTNET_FLT_IF_NOT_FOUND\n")); 2394 2466 return VERR_INTNET_FLT_IF_NOT_FOUND; -
trunk/src/VBox/HostDrivers/VBoxNetFlt/win/drv/VBoxNetLwf.inf
r56293 r59742 48 48 49 49 [VBoxNetLwf.ndi.Services] 50 AddService = VBoxNetLwf,, VBoxNetLwf.AddService 50 AddService = VBoxNetLwf,, VBoxNetLwf.AddService, VBoxNetLwf.AddEventLog 51 51 52 52 [VBoxNetLwf.AddService] … … 60 60 61 61 [VBoxNetLwf.AddService.AddReg] 62 63 [VBoxNetLwf.AddEventLog] 64 AddReg = VBoxNetLwf.AddEventLog.AddReg 65 66 [VBoxNetLwf.AddEventLog.AddReg] 67 HKR,,EventMessageFile,0x00020000,"%%SystemRoot%%\System32\IoLogMsg.dll" 68 HKR,,TypesSupported,0x00010001,7 69 62 70 63 71 [SourceDisksNames]
Note:
See TracChangeset
for help on using the changeset viewer.