Skip to content

Commit 3c67a20

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 a51d2d9 commit 3c67a20

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;
@@ -287,14 +299,20 @@ InstallDriver(_In_ BOOL UpdateExisting, _Inout_ BOOL *IsRebootRequired)
287299

288300
Logger(LOG_INFO, TEXT("Installing driver"));
289301
Ret = SetupCopyOEMInf(InfPath, NULL, SPOST_PATH, 0, NULL, 0, NULL, NULL);
290-
BOOL RebootRequired = FALSE;
291-
if (UpdateExisting &&
292-
!UpdateDriverForPlugAndPlayDevices(
293-
NULL, TEXT("root\\") TEXT(PRODUCT_TAP_WIN_COMPONENT_ID), InfPath, INSTALLFLAG_FORCE | INSTALLFLAG_NONINTERACTIVE, &RebootRequired))
294-
PrintError(LOG_WARN, TEXT("Could not update existing adapters"));
295-
if (RebootRequired) {
296-
Logger(LOG_WARN, TEXT("A reboot might be required"));
297-
*IsRebootRequired = TRUE;
302+
static const TCHAR *HwID[] = {
303+
TEXT("root\\") TEXT(PRODUCT_TAP_WIN_COMPONENT_ID),
304+
TEXT(PRODUCT_TAP_WIN_COMPONENT_ID)
305+
};
306+
for (int i = 0; i < _countof(HwID); ++i) {
307+
BOOL RebootRequired = FALSE;
308+
if (UpdateExisting &&
309+
!UpdateDriverForPlugAndPlayDevices(
310+
NULL, HwID[i], InfPath, INSTALLFLAG_FORCE | INSTALLFLAG_NONINTERACTIVE, &RebootRequired))
311+
PrintError(LOG_WARN, TEXT("Could not update existing %1 adapters"), HwID[i]);
312+
if (RebootRequired) {
313+
Logger(LOG_WARN, TEXT("A reboot might be required"));
314+
*IsRebootRequired = TRUE;
315+
}
298316
}
299317

300318
cleanupDelete:

0 commit comments

Comments
 (0)