AppendUnicodeString( OutName, &PartialRegistryKey, FALSE );
}
-VOID BindAdapter(
+BOOLEAN BindAdapter(
PLAN_ADAPTER Adapter,
PNDIS_STRING RegistryPath)
/*
sizeof(ULONG));
if (NdisStatus != NDIS_STATUS_SUCCESS) {
TI_DbgPrint(DEBUG_DATALINK, ("Could not set lookahead buffer size (0x%X).\n", NdisStatus));
- return;
+ return FALSE;
}
/* Bind the adapter to IP layer */
if (!IF) {
TI_DbgPrint(MIN_TRACE, ("Insufficient resources.\n"));
- return;
+ return FALSE;
}
/*
Status = FindDeviceDescForAdapter( &IF->Name, &IF->Description );
TI_DbgPrint(DEBUG_DATALINK,("Adapter Description: %wZ\n",
&IF->Description));
+ } else {
+ IPDestroyInterface( IF );
+ return FALSE;
}
DefaultMask.Type = IP_ADDRESS_V4;
if (NdisStatus != NDIS_STATUS_SUCCESS) {
TI_DbgPrint(DEBUG_DATALINK, ("Could not set packet filter (0x%X).\n", NdisStatus));
IPDestroyInterface(IF);
- return;
+ return FALSE;
}
Adapter->Context = IF;
Adapter->State = LAN_STATE_STARTED;
+ return TRUE;
}
if (NdisStatus == NDIS_STATUS_PENDING)
KeWaitForSingleObject(&IF->Event, UserRequest, KernelMode, FALSE, NULL);
else if (NdisStatus != NDIS_STATUS_SUCCESS) {
+ TI_DbgPrint(DEBUG_DATALINK,("denying adapter %wZ\n", AdapterName));
exFreePool(IF);
return NdisStatus;
}
&IF->MTU,
sizeof(UINT));
if (NdisStatus != NDIS_STATUS_SUCCESS) {
+ TI_DbgPrint(DEBUG_DATALINK,("denying adapter %wZ (NDISCall)\n", AdapterName));
exFreePool(IF);
return NdisStatus;
}
&AdapterListLock);
/* Bind adapter to IP layer */
- BindAdapter(IF, RegistryPath);
+ if( !BindAdapter(IF, RegistryPath) ) {
+ TI_DbgPrint(DEBUG_DATALINK,("denying adapter %wZ (BindAdapter)\n", AdapterName));
+ exFreePool(IF);
+ return NDIS_STATUS_NOT_ACCEPTED;
+ }
TI_DbgPrint(DEBUG_DATALINK, ("Leaving.\n"));