Skip to content

Commit 7344e80

Browse files
committed
MSM: Upgrade root\tap0901 and tap0901 adapters
tapinstall/devcon.exe creates tap0901 adapters, tapctl.exe creates root\ tap0901. Both use the same driver. Both adapters should upgrade when we update the driver. Signed-off-by: Simon Rozman <simon@rozman.si>
1 parent 9a33b0d commit 7344e80

File tree

1 file changed

+29
-11
lines changed

1 file changed

+29
-11
lines changed

msm/installation.c

Lines changed: 29 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,21 @@ SetLogger(_In_ LoggerFunction NewLogger)
3131
}
3232

3333
static VOID
34-
PrintError(_In_ LOGGER_LEVEL Level, _In_ const TCHAR *Prefix)
34+
PrintError(_In_ LOGGER_LEVEL Level, _In_z_ const TCHAR *Prefix, ...)
3535
{
3636
DWORD ErrorCode = GetLastError();
37-
TCHAR *SystemMessage = NULL, *FormattedMessage = NULL;
37+
TCHAR *Message = NULL, *SystemMessage = NULL, *FormattedMessage = NULL;
38+
va_list Args;
39+
va_start(Args, Prefix);
40+
FormatMessage(
41+
FORMAT_MESSAGE_FROM_STRING | FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_MAX_WIDTH_MASK,
42+
Prefix,
43+
0,
44+
0,
45+
(VOID *)&Message,
46+
0,
47+
&Args);
48+
va_end(Args);
3849
FormatMessage(
3950
FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_MAX_WIDTH_MASK,
4051
NULL,
@@ -51,11 +62,12 @@ PrintError(_In_ LOGGER_LEVEL Level, _In_ const TCHAR *Prefix)
5162
0,
5263
(VOID *)&FormattedMessage,
5364
0,
54-
(va_list *)(DWORD_PTR[]){ (DWORD_PTR)Prefix, (DWORD_PTR)ErrorCode, (DWORD_PTR)SystemMessage });
65+
(va_list *)(DWORD_PTR[]){ (DWORD_PTR)Message, (DWORD_PTR)ErrorCode, (DWORD_PTR)SystemMessage });
5566
if (FormattedMessage)
5667
Logger(Level, FormattedMessage);
5768
LocalFree(FormattedMessage);
5869
LocalFree(SystemMessage);
70+
LocalFree(Message);
5971
}
6072

6173
HINSTANCE ResourceModule;
@@ -291,14 +303,20 @@ InstallDriver(_In_ BOOL UpdateExisting, _Inout_ BOOL *IsRebootRequired)
291303

292304
Logger(LOG_INFO, TEXT("Installing driver"));
293305
Ret = SetupCopyOEMInf(InfPath, NULL, SPOST_PATH, 0, NULL, 0, NULL, NULL);
294-
BOOL RebootRequired = FALSE;
295-
if (UpdateExisting &&
296-
!UpdateDriverForPlugAndPlayDevices(
297-
NULL, TEXT("root\\") TEXT(PRODUCT_TAP_WIN_COMPONENT_ID), InfPath, INSTALLFLAG_FORCE | INSTALLFLAG_NONINTERACTIVE, &RebootRequired))
298-
PrintError(LOG_WARN, TEXT("Could not update existing adapters"));
299-
if (RebootRequired) {
300-
Logger(LOG_WARN, TEXT("A reboot might be required"));
301-
*IsRebootRequired = TRUE;
306+
static const TCHAR *HwID[] = {
307+
TEXT("root\\") TEXT(PRODUCT_TAP_WIN_COMPONENT_ID),
308+
TEXT(PRODUCT_TAP_WIN_COMPONENT_ID)
309+
};
310+
for (int i = 0; i < _countof(HwID); ++i) {
311+
BOOL RebootRequired = FALSE;
312+
if (UpdateExisting &&
313+
!UpdateDriverForPlugAndPlayDevices(
314+
NULL, HwID[i], InfPath, INSTALLFLAG_FORCE | INSTALLFLAG_NONINTERACTIVE, &RebootRequired))
315+
PrintError(LOG_WARN, TEXT("Could not update existing %1 adapters"), HwID[i]);
316+
if (RebootRequired) {
317+
Logger(LOG_WARN, TEXT("A reboot might be required"));
318+
*IsRebootRequired = TRUE;
319+
}
302320
}
303321

304322
cleanupDelete:

0 commit comments

Comments
 (0)