typedef struct _XENVIF_DRIVER {
PDRIVER_OBJECT DriverObject;
HANDLE ParametersKey;
- HANDLE AddressesKey;
HANDLE StatusKey;
} XENVIF_DRIVER, *PXENVIF_DRIVER;
return __DriverGetParametersKey();
}
-static FORCEINLINE VOID
-__DriverSetAddressesKey(
- IN HANDLE Key
- )
-{
- Driver.AddressesKey = Key;
-}
-
-static FORCEINLINE HANDLE
-__DriverGetAddressesKey(
- VOID
- )
-{
- return Driver.AddressesKey;
-}
-
-HANDLE
-DriverGetAddressesKey(
- VOID
- )
-{
- return __DriverGetAddressesKey();
-}
-
static FORCEINLINE VOID
__DriverSetStatusKey(
IN HANDLE Key
IN PDRIVER_OBJECT DriverObject
)
{
- HANDLE AddressesKey;
HANDLE ParametersKey;
HANDLE StatusKey;
RegistryCloseKey(StatusKey);
- AddressesKey = __DriverGetAddressesKey();
- __DriverSetAddressesKey(NULL);
-
- RegistryCloseKey(AddressesKey);
-
ParametersKey = __DriverGetParametersKey();
__DriverSetParametersKey(NULL);
{
HANDLE ServiceKey;
HANDLE ParametersKey;
- HANDLE AddressesKey;
HANDLE StatusKey;
ULONG Index;
NTSTATUS status;
__DriverSetParametersKey(ParametersKey);
- status = RegistryCreateSubKey(ServiceKey,
- "Addresses",
- REG_OPTION_VOLATILE,
- &AddressesKey);
- if (!NT_SUCCESS(status))
- goto fail4;
-
- __DriverSetAddressesKey(AddressesKey);
-
status = RegistryCreateSubKey(ServiceKey,
"Status",
REG_OPTION_VOLATILE,
&StatusKey);
if (!NT_SUCCESS(status))
- goto fail5;
+ goto fail4;
__DriverSetStatusKey(StatusKey);
return STATUS_SUCCESS;
-fail5:
- Error("fail5\n");
-
- __DriverSetAddressesKey(NULL);
-
- RegistryCloseKey(AddressesKey);
-
fail4:
Error("fail4\n");
IN PCHAR Buffer
)
{
- HANDLE AddressesKey;
- ANSI_STRING Ansi;
- ULONG Index;
NTSTATUS status;
status = __PdoParseAddress(Buffer, &Pdo->PermanentAddress);
if (!NT_SUCCESS(status))
goto fail1;
- AddressesKey = DriverGetAddressesKey();
-
- RtlInitAnsiString(&Ansi, Buffer);
-
- for (Index = 0; Index < Ansi.Length; Index++)
- Ansi.Buffer[Index] = (CHAR)toupper(Ansi.Buffer[Index]);
-
- Info("%s %Z\n", __PdoGetName(Pdo), &Ansi);
-
- status = RegistryUpdateSzValue(AddressesKey,
- __PdoGetName(Pdo),
- REG_SZ,
- &Ansi);
- if (!NT_SUCCESS(status))
- goto fail2;
+ Info("%s: %s\n", __PdoGetName(Pdo), Buffer);
return STATUS_SUCCESS;
-fail2:
- Error("fail2\n");
-
fail1:
Error("fail1 (%08x)\n", status);
if (!NT_SUCCESS(status))
goto fail2;
+ Info("%s: %Z\n", __PdoGetName(Pdo), &Ansi[0]);
+
RegistryFreeSzValue(Ansi);
done: