PXENNET_RECEIVER Receiver;
PXENNET_TRANSMITTER Transmitter;
BOOLEAN Enabled;
+
+ NTSTATUS (*_snprintf_s)(char *,
+ size_t,
+ size_t,
+ const char *,
+ ...);
};
static LONG AdapterCount;
)
{
ULONG Index;
- NTSTATUS (*___snprintf_s)(char *,
- size_t,
- size_t,
- const char *,
- ...);
CHAR Distribution[MAXNAMELEN];
CHAR Vendor[MAXNAMELEN];
const CHAR *Product;
Trace("====>\n");
- status = LinkGetRoutineAddress("ntdll.dll",
- "_snprintf_s",
- (PVOID *)&___snprintf_s);
- if (!NT_SUCCESS(status))
- goto fail1;
-
Index = 0;
while (Index <= MAXIMUM_INDEX) {
PCHAR Buffer;
- (VOID) ___snprintf_s(Distribution,
- MAXNAMELEN,
- _TRUNCATE,
- "%u",
- Index);
+ (VOID) Adapter->_snprintf_s(Distribution,
+ MAXNAMELEN,
+ _TRUNCATE,
+ "%u",
+ Index);
status = XENBUS_STORE(Read,
&Adapter->StoreInterface,
if (status == STATUS_OBJECT_NAME_NOT_FOUND)
goto update;
- goto fail2;
+ goto fail1;
}
XENBUS_STORE(Free,
}
status = STATUS_UNSUCCESSFUL;
- goto fail3;
+ goto fail2;
update:
- (VOID) ___snprintf_s(Vendor,
- MAXNAMELEN,
- _TRUNCATE,
- "%s",
- VENDOR_NAME_STR);
+ (VOID) Adapter->_snprintf_s(Vendor,
+ MAXNAMELEN,
+ _TRUNCATE,
+ "%s",
+ VENDOR_NAME_STR);
for (Index = 0; Vendor[Index] != '\0'; Index++)
if (!isalnum((UCHAR)Vendor[Index]))
Trace("<====\n");
return STATUS_SUCCESS;
-fail3:
- Error("fail3\n");
-
fail2:
Error("fail2\n");
if (!NT_SUCCESS(status))
goto fail2;
- status = AdapterSetDistribution(Adapter);
+ status = LinkGetRoutineAddress("ntdll.dll",
+ "_snprintf_s",
+ (PVOID *)&Adapter->_snprintf_s);
if (!NT_SUCCESS(status))
goto fail3;
+ status = AdapterSetDistribution(Adapter);
+ if (!NT_SUCCESS(status))
+ goto fail4;
+
status = XENVIF_VIF(Enable,
&Adapter->VifInterface,
AdapterVifCallback,
Adapter);
if (!NT_SUCCESS(status))
- goto fail4;
+ goto fail5;
AdapterMediaStateChange(Adapter);
return NDIS_STATUS_SUCCESS;
-fail4:
+fail5:
AdapterClearDistribution(Adapter);
+fail4:
+ Adapter->_snprintf_s = NULL;
+
fail3:
XENBUS_SUSPEND(Release, &Adapter->SuspendInterface);
AdapterClearDistribution(Adapter);
+ Adapter->_snprintf_s = NULL;
+
XENBUS_SUSPEND(Release, &Adapter->SuspendInterface);
XENBUS_STORE(Release, &Adapter->StoreInterface);
}