|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [win-pv-devel] [PATCH xenhid] Remove revision.h and simplify coinst.c
XENHID is not a bus driver and, as such, does not need a revision.h. Nor
does it have to sanity check support for non-existent child drivers in
coinst.c.
NOTE: I've largely cribbed XENNET's coinst.c, since it is another example
of a leaf function driver.
Signed-off-by: Paul Durrant <pdurrant@xxxxxxxxxx>
---
include/revision.h | 46 ---
src/coinst/coinst.c | 796 ++------------------------------------------
2 files changed, 35 insertions(+), 807 deletions(-)
delete mode 100644 include/revision.h
diff --git a/include/revision.h b/include/revision.h
deleted file mode 100644
index 6c46ad9..0000000
--- a/include/revision.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/* Copyright (c) Citrix Systems Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms,
- * with or without modification, are permitted provided
- * that the following conditions are met:
- *
- * * Redistributions of source code must retain the above
- * copyright notice, this list of conditions and the
- * following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the
- * following disclaimer in the documentation and/or other
- * materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#ifndef _REVISION_H
-#define _REVISION_H
-
-// Key:
-// H - XENHID_HID_INTERFACE
-// ST - XENBUS_STORE_INTERFACE
-// SU - XENBUS_SUSPEND_INTERFACE
-
-// REVISION H ST SU
-#define DEFINE_REVISION_TABLE \
- DEFINE_REVISION(0x09000000, 1, 0, 0), \
- DEFINE_REVISION(0x09000001, 1, 1, 1), \
- DEFINE_REVISION(0x09000002, 1, 2, 1)
-
-#endif // _REVISION_H
diff --git a/src/coinst/coinst.c b/src/coinst/coinst.c
index 56e566b..aec1ae9 100644
--- a/src/coinst/coinst.c
+++ b/src/coinst/coinst.c
@@ -38,7 +38,6 @@
#include <assert.h>
#include <version.h>
-#include <revision.h>
#define stringify_literal(_text) #_text
#define stringify(_text) stringify_literal(_text)
@@ -50,19 +49,6 @@ __user_code;
#define SERVICES_KEY "SYSTEM\\CurrentControlSet\\Services"
-#define SERVICE_KEY(_Driver) \
- SERVICES_KEY ## "\\" ## #_Driver
-
-#define UNPLUG_KEY \
- SERVICE_KEY(XEN) ## "\\Unplug"
-
-#define CONTROL_KEY "SYSTEM\\CurrentControlSet\\Control"
-
-#define CLASS_KEY \
- CONTROL_KEY ## "\\Class"
-
-#define ENUM_KEY "SYSTEM\\CurrentControlSet\\Enum"
-
static VOID
#pragma prefast(suppress:6262) // Function uses '1036' bytes of stack: exceeds
/analyze:stacksize'1024'
__Log(
@@ -108,8 +94,8 @@ __Log(
#define Log(_Format, ...) \
__Log(__MODULE__ "|" __FUNCTION__ ": " _Format, __VA_ARGS__)
-static PTCHAR
-GetErrorMessage(
+static FORCEINLINE PTCHAR
+__GetErrorMessage(
IN DWORD Error
)
{
@@ -277,7 +263,7 @@ fail1:
{
PTCHAR Message;
- Message = GetErrorMessage(Error);
+ Message = __GetErrorMessage(Error);
Log("fail1 (%s)", Message);
LocalFree(Message);
}
@@ -310,669 +296,7 @@ fail1:
{
PTCHAR Message;
- Message = GetErrorMessage(Error);
- Log("fail1 (%s)", Message);
- LocalFree(Message);
- }
-
- return FALSE;
-}
-
-static BOOLEAN
-OpenEnumKey(
- OUT PHKEY EnumKey
- )
-{
- HRESULT Error;
-
- Error = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
- ENUM_KEY,
- 0,
- KEY_READ,
- EnumKey);
- if (Error != ERROR_SUCCESS) {
- SetLastError(Error);
- goto fail1;
- }
-
- return TRUE;
-
-fail1:
- Error = GetLastError();
-
- {
- PTCHAR Message;
- Message = GetErrorMessage(Error);
- Log("fail1 (%s)", Message);
- LocalFree(Message);
- }
-
- return FALSE;
-}
-
-static BOOLEAN
-OpenBusKey(
- IN PTCHAR BusKeyName,
- OUT PHKEY BusKey
- )
-{
- BOOLEAN Success;
- HKEY EnumKey;
- HRESULT Error;
-
- Success = OpenEnumKey(&EnumKey);
- if (!Success)
- goto fail1;
-
- Error = RegOpenKeyEx(EnumKey,
- BusKeyName,
- 0,
- KEY_READ,
- BusKey);
- if (Error != ERROR_SUCCESS) {
- SetLastError(Error);
- goto fail2;
- }
-
- RegCloseKey(EnumKey);
-
- return TRUE;
-
-fail2:
- Log("fail2");
-
- RegCloseKey(EnumKey);
-
-fail1:
- Error = GetLastError();
-
- {
- PTCHAR Message;
-
- Message = GetErrorMessage(Error);
- Log("fail1 (%s)", Message);
- LocalFree(Message);
- }
-
- return FALSE;
-}
-
-static BOOLEAN
-OpenDeviceKey(
- IN PTCHAR BusKeyName,
- IN PTCHAR DeviceKeyName,
- OUT PHKEY DeviceKey
- )
-{
- BOOLEAN Success;
- HKEY BusKey;
- HRESULT Error;
-
- Success = OpenBusKey(BusKeyName, &BusKey);
- if (!Success)
- goto fail1;
-
- Error = RegOpenKeyEx(BusKey,
- DeviceKeyName,
- 0,
- KEY_READ,
- DeviceKey);
- if (Error != ERROR_SUCCESS) {
- SetLastError(Error);
- goto fail2;
- }
-
- RegCloseKey(BusKey);
-
- return TRUE;
-
-fail2:
- Log("fail2");
-
- RegCloseKey(BusKey);
-
-fail1:
- Error = GetLastError();
-
- {
- PTCHAR Message;
-
- Message = GetErrorMessage(Error);
- Log("fail1 (%s)", Message);
- LocalFree(Message);
- }
-
- return FALSE;
-}
-
-static BOOLEAN
-GetDriverKeyName(
- IN HKEY DeviceKey,
- OUT PTCHAR *Name
- )
-{
- HRESULT Error;
- DWORD SubKeys;
- DWORD MaxSubKeyLength;
- DWORD SubKeyLength;
- PTCHAR SubKeyName;
- DWORD Index;
- HKEY SubKey;
- PTCHAR DriverKeyName;
-
- Error = RegQueryInfoKey(DeviceKey,
- NULL,
- NULL,
- NULL,
- &SubKeys,
- &MaxSubKeyLength,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL);
- if (Error != ERROR_SUCCESS) {
- SetLastError(Error);
- goto fail1;
- }
-
- SubKeyLength = MaxSubKeyLength + sizeof (TCHAR);
-
- SubKeyName = malloc(SubKeyLength);
- if (SubKeyName == NULL)
- goto fail2;
-
- SubKey = NULL;
- DriverKeyName = NULL;
-
- for (Index = 0; Index < SubKeys; Index++) {
- DWORD MaxValueLength;
- DWORD DriverKeyNameLength;
- DWORD Type;
-
- SubKeyLength = MaxSubKeyLength + sizeof (TCHAR);
- memset(SubKeyName, 0, SubKeyLength);
-
- Error = RegEnumKeyEx(DeviceKey,
- Index,
- (LPTSTR)SubKeyName,
- &SubKeyLength,
- NULL,
- NULL,
- NULL,
- NULL);
- if (Error != ERROR_SUCCESS) {
- SetLastError(Error);
- goto fail3;
- }
-
- Error = RegOpenKeyEx(DeviceKey,
- SubKeyName,
- 0,
- KEY_READ,
- &SubKey);
- if (Error != ERROR_SUCCESS) {
- SubKey = NULL;
- continue;
- }
-
- Error = RegQueryInfoKey(SubKey,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- &MaxValueLength,
- NULL,
- NULL);
- if (Error != ERROR_SUCCESS) {
- SetLastError(Error);
- goto fail4;
- }
-
- DriverKeyNameLength = MaxValueLength + sizeof (TCHAR);
-
- DriverKeyName = calloc(1, DriverKeyNameLength);
- if (DriverKeyName == NULL)
- goto fail5;
-
- Error = RegQueryValueEx(SubKey,
- "Driver",
- NULL,
- &Type,
- (LPBYTE)DriverKeyName,
- &DriverKeyNameLength);
- if (Error == ERROR_SUCCESS &&
- Type == REG_SZ)
- break;
-
- free(DriverKeyName);
- DriverKeyName = NULL;
-
- RegCloseKey(SubKey);
- SubKey = NULL;
- }
-
- Log("%s", (DriverKeyName != NULL) ? DriverKeyName : "none found");
-
- if (SubKey != NULL)
- RegCloseKey(SubKey);
-
- free(SubKeyName);
-
- *Name = DriverKeyName;
- return TRUE;
-
-fail5:
- Log("fail5");
-
-fail4:
- Log("fail4");
-
- if (SubKey != NULL)
- RegCloseKey(SubKey);
-
-fail3:
- Log("fail3");
-
- free(SubKeyName);
-
-fail2:
- Log("fail2");
-
-fail1:
- Error = GetLastError();
-
- {
- PTCHAR Message;
-
- Message = GetErrorMessage(Error);
- Log("fail1 (%s)", Message);
- LocalFree(Message);
- }
-
- return FALSE;
-}
-
-static BOOLEAN
-OpenClassKey(
- OUT PHKEY ClassKey
- )
-{
- HRESULT Error;
-
- Error = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
- CLASS_KEY,
- 0,
- KEY_READ,
- ClassKey);
- if (Error != ERROR_SUCCESS) {
- SetLastError(Error);
- goto fail1;
- }
-
- return TRUE;
-
-fail1:
- Error = GetLastError();
-
- {
- PTCHAR Message;
- Message = GetErrorMessage(Error);
- Log("fail1 (%s)", Message);
- LocalFree(Message);
- }
-
- return FALSE;
-}
-
-static BOOLEAN
-OpenDriverKey(
- IN PTCHAR DriverKeyName,
- OUT PHKEY DriverKey
- )
-{
- BOOLEAN Success;
- HKEY ClassKey;
- HRESULT Error;
-
- Success = OpenClassKey(&ClassKey);
- if (!Success)
- goto fail1;
-
- Error = RegOpenKeyEx(ClassKey,
- DriverKeyName,
- 0,
- KEY_READ,
- DriverKey);
- if (Error != ERROR_SUCCESS) {
- SetLastError(Error);
- goto fail2;
- }
-
- RegCloseKey(ClassKey);
-
- return TRUE;
-
-fail2:
- Log("fail2");
-
- RegCloseKey(ClassKey);
-
-fail1:
- Error = GetLastError();
-
- {
- PTCHAR Message;
-
- Message = GetErrorMessage(Error);
- Log("fail1 (%s)", Message);
- LocalFree(Message);
- }
-
- return FALSE;
-}
-
-#define DEFINE_REVISION(_N, _H, _ST, _SU) \
- (_N)
-
-static DWORD DeviceRevision[] = {
- DEFINE_REVISION_TABLE
-};
-
-#undef DEFINE_REVISION
-
-static BOOLEAN
-SupportDeviceID(
- IN PTCHAR DeviceID
- )
-{
- unsigned int Revision;
- int Count;
- DWORD Index;
- HRESULT Error;
-
- DeviceID = strrchr(DeviceID, '&');
- assert(DeviceID != NULL);
- DeviceID++;
-
- Count = sscanf_s(DeviceID,
- "REV_%8x",
- &Revision);
- if (Count != 1) {
- SetLastError(ERROR_BAD_FORMAT);
- goto fail1;
- }
-
- for (Index = 0; Index < ARRAYSIZE(DeviceRevision); Index++) {
- if (Revision == DeviceRevision[Index])
- goto found;
- }
-
- SetLastError(ERROR_FILE_NOT_FOUND);
- goto fail2;
-
-found:
- Log("%x", Revision);
-
- return TRUE;
-
-fail2:
- Log("fail2");
-
-fail1:
- Error = GetLastError();
-
- {
- PTCHAR Message;
-
- Message = GetErrorMessage(Error);
- Log("fail1 (%s)", Message);
- LocalFree(Message);
- }
-
- return FALSE;
-}
-
-static BOOLEAN
-GetMatchingDeviceID(
- IN HKEY DriverKey,
- OUT PTCHAR *MatchingDeviceID
- )
-{
- HRESULT Error;
- DWORD MaxValueLength;
- DWORD MatchingDeviceIDLength;
- DWORD Type;
- DWORD Index;
-
- Error = RegQueryInfoKey(DriverKey,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- &MaxValueLength,
- NULL,
- NULL);
- if (Error != ERROR_SUCCESS) {
- SetLastError(Error);
- goto fail1;
- }
-
- MatchingDeviceIDLength = MaxValueLength + sizeof (TCHAR);
-
- *MatchingDeviceID = calloc(1, MatchingDeviceIDLength);
- if (*MatchingDeviceID == NULL)
- goto fail2;
-
- Error = RegQueryValueEx(DriverKey,
- "MatchingDeviceId",
- NULL,
- &Type,
- (LPBYTE)*MatchingDeviceID,
- &MatchingDeviceIDLength);
- if (Error != ERROR_SUCCESS) {
- SetLastError(Error);
- goto fail3;
- }
-
- if (Type != REG_SZ) {
- SetLastError(ERROR_BAD_FORMAT);
- goto fail4;
- }
-
- for (Index = 0; Index < strlen(*MatchingDeviceID); Index++)
- (*MatchingDeviceID)[Index] = (CHAR)toupper((*MatchingDeviceID)[Index]);
-
- Log("%s", *MatchingDeviceID);
-
- return TRUE;
-
-fail4:
- Log("fail4");
-
-fail3:
- Log("fail3");
-
- free(*MatchingDeviceID);
-
-fail2:
- Log("fail2");
-
-fail1:
- Error = GetLastError();
-
- {
- PTCHAR Message;
-
- Message = GetErrorMessage(Error);
- Log("fail1 (%s)", Message);
- LocalFree(Message);
- }
-
- return FALSE;
-}
-
-static BOOLEAN
-SupportChildDrivers(
- VOID
- )
-{
- BOOLEAN Success;
- HKEY XenbusKey;
- HRESULT Error;
- DWORD SubKeys;
- DWORD MaxSubKeyLength;
- DWORD SubKeyLength;
- PTCHAR SubKeyName;
- HKEY DeviceKey;
- PTCHAR DriverKeyName;
- HKEY DriverKey;
- PTCHAR MatchingDeviceID;
- DWORD Index;
-
- Log("====>");
-
- Success = OpenBusKey("XENHID", &XenbusKey);
- if (!Success) {
- // If there is no key then this must be a fresh installation
- if (GetLastError() == ERROR_FILE_NOT_FOUND)
- goto done;
-
- goto fail1;
- }
-
- Error = RegQueryInfoKey(XenbusKey,
- NULL,
- NULL,
- NULL,
- &SubKeys,
- &MaxSubKeyLength,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL);
- if (Error != ERROR_SUCCESS) {
- SetLastError(Error);
- goto fail2;
- }
-
- SubKeyLength = MaxSubKeyLength + sizeof (TCHAR);
-
- SubKeyName = malloc(SubKeyLength);
- if (SubKeyName == NULL)
- goto fail3;
-
- for (Index = 0; Index < SubKeys; Index++) {
- SubKeyLength = MaxSubKeyLength + sizeof (TCHAR);
- memset(SubKeyName, 0, SubKeyLength);
-
- Error = RegEnumKeyEx(XenbusKey,
- Index,
- (LPTSTR)SubKeyName,
- &SubKeyLength,
- NULL,
- NULL,
- NULL,
- NULL);
- if (Error != ERROR_SUCCESS) {
- SetLastError(Error);
- goto fail4;
- }
-
- Success = OpenDeviceKey("XENHID", SubKeyName, &DeviceKey);
- if (!Success)
- goto fail5;
-
- Success = GetDriverKeyName(DeviceKey, &DriverKeyName);
- if (!Success)
- goto fail6;
-
- if (DriverKeyName == NULL)
- goto loop;
-
- Success = OpenDriverKey(DriverKeyName, &DriverKey);
- if (!Success)
- goto loop;
-
- Success = GetMatchingDeviceID(DriverKey, &MatchingDeviceID);
- if (!Success)
- goto fail7;
-
- Success = SupportDeviceID(MatchingDeviceID);
- if (!Success)
- goto fail8;
-
- free(MatchingDeviceID);
-
- RegCloseKey(DriverKey);
-
- loop:
- if (DriverKeyName != NULL)
- free(DriverKeyName);
-
- RegCloseKey(DeviceKey);
- }
-
- free(SubKeyName);
-
- RegCloseKey(XenbusKey);
-
-done:
- Log("<====");
-
- return TRUE;
-
-fail8:
- Log("fail8");
-
- free(MatchingDeviceID);
-
-fail7:
- Log("fail7");
-
- RegCloseKey(DriverKey);
-
- free(DriverKeyName);
-
-fail6:
- Log("fail6");
-
- RegCloseKey(DeviceKey);
-
-fail5:
- Log("fail5");
-
-fail4:
- Log("fail4");
-
- free(SubKeyName);
-
-fail3:
- Log("fail3");
-
-fail2:
- Log("fail2");
-
- RegCloseKey(XenbusKey);
-
-fail1:
- Error = GetLastError();
-
- {
- PTCHAR Message;
-
- Message = GetErrorMessage(Error);
+ Message = __GetErrorMessage(Error);
Log("fail1 (%s)", Message);
LocalFree(Message);
}
@@ -980,8 +304,8 @@ fail1:
return FALSE;
}
-static HRESULT
-DifInstallPreProcess(
+static FORCEINLINE HRESULT
+__DifInstallPreProcess(
IN HDEVINFO DeviceInfoSet,
IN PSP_DEVINFO_DATA DeviceInfoData,
IN PCOINSTALLER_CONTEXT_DATA Context
@@ -1006,17 +330,10 @@ DifInstallPreProcess(
goto fail2;
}
- Success = SupportChildDrivers();
- if (!Success)
- goto fail3;
-
Log("<====");
return NO_ERROR;
-fail3:
- Log("fail3");
-
fail2:
Log("fail2");
@@ -1026,7 +343,7 @@ fail1:
{
PTCHAR Message;
- Message = GetErrorMessage(Error);
+ Message = __GetErrorMessage(Error);
Log("fail1 (%s)", Message);
LocalFree(Message);
}
@@ -1034,8 +351,8 @@ fail1:
return Error;
}
-static HRESULT
-DifInstallPostProcess(
+static FORCEINLINE HRESULT
+__DifInstallPostProcess(
IN HDEVINFO DeviceInfoSet,
IN PSP_DEVINFO_DATA DeviceInfoData,
IN PCOINSTALLER_CONTEXT_DATA Context
@@ -1057,57 +374,31 @@ DifInstall(
IN PCOINSTALLER_CONTEXT_DATA Context
)
{
- SP_DEVINSTALL_PARAMS DeviceInstallParams;
HRESULT Error;
- DeviceInstallParams.cbSize = sizeof (DeviceInstallParams);
-
- if (!SetupDiGetDeviceInstallParams(DeviceInfoSet,
- DeviceInfoData,
- &DeviceInstallParams))
- goto fail1;
-
- Log("Flags = %08x", DeviceInstallParams.Flags);
-
if (!Context->PostProcessing) {
- Error = DifInstallPreProcess(DeviceInfoSet, DeviceInfoData, Context);
-
+ Error = __DifInstallPreProcess(DeviceInfoSet, DeviceInfoData, Context);
if (Error == NO_ERROR)
Error = ERROR_DI_POSTPROCESSING_REQUIRED;
} else {
Error = Context->InstallResult;
if (Error == NO_ERROR) {
- (VOID) DifInstallPostProcess(DeviceInfoSet, DeviceInfoData,
Context);
+ (VOID) __DifInstallPostProcess(DeviceInfoSet, DeviceInfoData,
Context);
} else {
PTCHAR Message;
- Message = GetErrorMessage(Error);
- Log("NOT RUNNING (DifInstallPreProcess Error: %s)", Message);
+ Message = __GetErrorMessage(Error);
+ Log("NOT RUNNING (__DifInstallPreProcess Error: %s)", Message);
LocalFree(Message);
}
-
- Error = NO_ERROR;
- }
-
- return Error;
-
-fail1:
- Error = GetLastError();
-
- {
- PTCHAR Message;
-
- Message = GetErrorMessage(Error);
- Log("fail1 (%s)", Message);
- LocalFree(Message);
}
return Error;
}
-static HRESULT
-DifRemovePreProcess(
+static FORCEINLINE HRESULT
+__DifRemovePreProcess(
IN HDEVINFO DeviceInfoSet,
IN PSP_DEVINFO_DATA DeviceInfoData,
IN PCOINSTALLER_CONTEXT_DATA Context
@@ -1119,11 +410,11 @@ DifRemovePreProcess(
Log("<===>");
- return NO_ERROR;
+ return NO_ERROR;
}
-static HRESULT
-DifRemovePostProcess(
+static FORCEINLINE HRESULT
+__DifRemovePostProcess(
IN HDEVINFO DeviceInfoSet,
IN PSP_DEVINFO_DATA DeviceInfoData,
IN PCOINSTALLER_CONTEXT_DATA Context
@@ -1145,20 +436,10 @@ DifRemove(
IN PCOINSTALLER_CONTEXT_DATA Context
)
{
- SP_DEVINSTALL_PARAMS DeviceInstallParams;
HRESULT Error;
- DeviceInstallParams.cbSize = sizeof (DeviceInstallParams);
-
- if (!SetupDiGetDeviceInstallParams(DeviceInfoSet,
- DeviceInfoData,
- &DeviceInstallParams))
- goto fail1;
-
- Log("Flags = %08x", DeviceInstallParams.Flags);
-
if (!Context->PostProcessing) {
- Error = DifRemovePreProcess(DeviceInfoSet, DeviceInfoData, Context);
+ Error = __DifRemovePreProcess(DeviceInfoSet, DeviceInfoData, Context);
if (Error == NO_ERROR)
Error = ERROR_DI_POSTPROCESSING_REQUIRED;
@@ -1166,29 +447,14 @@ DifRemove(
Error = Context->InstallResult;
if (Error == NO_ERROR) {
- (VOID) DifRemovePostProcess(DeviceInfoSet, DeviceInfoData,
Context);
+ (VOID) __DifRemovePostProcess(DeviceInfoSet, DeviceInfoData,
Context);
} else {
PTCHAR Message;
- Message = GetErrorMessage(Error);
- Log("NOT RUNNING (DifRemovePreProcess Error: %s)", Message);
+ Message = __GetErrorMessage(Error);
+ Log("NOT RUNNING (__DifRemovePreProcess Error: %s)", Message);
LocalFree(Message);
}
-
- Error = NO_ERROR;
- }
-
- return Error;
-
-fail1:
- Error = GetLastError();
-
- {
- PTCHAR Message;
-
- Message = GetErrorMessage(Error);
- Log("fail1 (%s)", Message);
- LocalFree(Message);
}
return Error;
@@ -1229,11 +495,19 @@ Entry(
TRUE :
FALSE;
- // If there is no driver information then the NULL driver is being
- // installed. Treat this as we would a DIF_REMOVE.
- Error = (DriverInfoAvailable) ?
- DifInstall(DeviceInfoSet, DeviceInfoData, Context) :
- DifRemove(DeviceInfoSet, DeviceInfoData, Context);
+ // The NET class installer will call DIF_REMOVE even in the event of
+ // a NULL driver add. However, the default installer (for the NULL
+ // driver) then fails for some reason so we squash the error in
+ // post-processing.
+ if (DriverInfoAvailable) {
+ Error = DifInstall(DeviceInfoSet, DeviceInfoData, Context);
+ } else {
+ if (!Context->PostProcessing) {
+ Error = ERROR_DI_POSTPROCESSING_REQUIRED;
+ } else {
+ Error = NO_ERROR;
+ }
+ }
break;
}
case DIF_REMOVE:
--
2.17.1
_______________________________________________
win-pv-devel mailing list
win-pv-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/win-pv-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |