Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Can't install network adapter on Arm64 PC, can't find a DCO driver. #81

Open
oblomingo opened this issue Sep 5, 2024 · 1 comment
Open

Comments

@oblomingo
Copy link

Hey,
We have found that some users can't use OpenVPN protocol, cause installer can't install a Arm64 network adapter.
The installer has OpenVPN DCO merged module taken from this Github page and a custom action:
C:\Program Files\xxx\Resources\arm64\tapctl.exe" create --hwid ovpn-dco --name "OpenVPN Data Channel Offload Custom Name"
It seems the installer can successfully install a driver. Please take a look at a log part from setupapi.dev.log:

>>>  [SetupCopyOEMInf - C:\Program Files\Common Files\ovpn-dco\Win11\ovpn-dco.inf]
>>>  Section start 2024/08/22 11:41:09.892
      cmd: C:\Windows\System32\MsiExec.exe -Embedding 39FC7E12BA0ED9655F11E172895F275A E Global\MSI0000
     inf: Copy style: 0x00000000
     sto: {Setup Import Driver Package: C:\Program Files\Common Files\ovpn-dco\Win11\ovpn-dco.inf} 11:41:09.902
     inf:      Provider: OpenVPN, Inc
     inf:      Class GUID: {4d36e972-e325-11ce-bfc1-08002be10318}
     inf:      Driver Version: 04/12/2024,1.1.1.0
     inf:      Catalog File: ovpn-dco.cat
     ump:      Import flags: 0x00000001
     pol:      {Driver package policy check} 11:41:09.995
     pol:      {Driver package policy check - exit(0x00000000)} 11:41:09.995
     sto:      {Stage Driver Package: C:\Program Files\Common Files\ovpn-dco\Win11\ovpn-dco.inf} 11:41:09.996
     inf:           Provider       = OpenVPN, Inc
     inf:           Class GUID     = {4d36e972-e325-11ce-bfc1-08002be10318}
     inf:           Driver Version = 04/12/2024,1.1.1.0
     inf:           Catalog File   = ovpn-dco.cat
     inf:           Version Flags  = 0x00000001
     inf:           {Query Configurability: C:\Program Files\Common Files\ovpn-dco\Win11\ovpn-dco.inf} 11:41:10.005
     inf:                Driver package is fully isolated.
     inf:                Driver package 'ovpn-dco.inf' is configurable.
     inf:           {Query Configurability: exit(0x00000000)} 11:41:10.006
     flq:           {FILE_QUEUE_COMMIT} 11:41:10.006
     flq:                Copying 'C:\Program Files\Common Files\ovpn-dco\Win11\ovpn-dco.cat' to 'C:\Windows\System32\DriverStore\Temp\{367b0960-ffb3-2c46-881c-ba540719c858}\ovpn-dco.cat'.
     flq:                Copying 'C:\Program Files\Common Files\ovpn-dco\Win11\ovpn-dco.inf' to 'C:\Windows\System32\DriverStore\Temp\{367b0960-ffb3-2c46-881c-ba540719c858}\ovpn-dco.inf'.
     flq:           {FILE_QUEUE_COMMIT - exit(0x00000000)} 11:41:10.011
     sto:           {DRIVERSTORE IMPORT VALIDATE} 11:41:10.012
     sig:                Driver package catalog is valid.
     sig:                {_VERIFY_FILE_SIGNATURE} 11:41:10.019
     sig:                     Key      = ovpn-dco.inf
     sig:                     FilePath = C:\Windows\System32\DriverStore\Temp\{367b0960-ffb3-2c46-881c-ba540719c858}\ovpn-dco.inf
     sig:                     Catalog  = C:\Windows\System32\DriverStore\Temp\{367b0960-ffb3-2c46-881c-ba540719c858}\ovpn-dco.cat
     sig:                     Success: File is signed in catalog.
     sig:                {_VERIFY_FILE_SIGNATURE exit(0x00000000)} 11:41:10.029
     sto:           {DRIVERSTORE IMPORT VALIDATE: exit(0x00000000)} 11:41:10.029
     sig:           Signer Score  = 0x0D000005 (WHQL)
     sig:           Signer Name   = Microsoft Windows Hardware Compatibility Publisher
     sig:           Submission ID = 53719220_14353574059272285_1152921505697628289
     sto:           {Core Driver Package Import: ovpn-dco.inf_arm64_f2b346196cf322ed} 11:41:10.031
     sto:                {DRIVERSTORE IMPORT BEGIN} 11:41:10.032
     sto:                {DRIVERSTORE IMPORT BEGIN: exit(0x00000000)} 11:41:10.032
     cpy:                {Copy Directory: C:\Windows\System32\DriverStore\Temp\{367b0960-ffb3-2c46-881c-ba540719c858}} 11:41:10.032
     cpy:                     Target Path = C:\Windows\System32\DriverStore\FileRepository\ovpn-dco.inf_arm64_f2b346196cf322ed
     cpy:                {Copy Directory: exit(0x00000000)} 11:41:10.033
     idb:                {Register Driver Package: C:\Windows\System32\DriverStore\FileRepository\ovpn-dco.inf_arm64_f2b346196cf322ed\ovpn-dco.inf} 11:41:10.036
     idb:                     Created driver package object 'ovpn-dco.inf_arm64_f2b346196cf322ed' in DRIVERS database node.
     idb:                     Created driver INF file object 'oem5.inf' in DRIVERS database node.
     idb:                     Registered driver package 'ovpn-dco.inf_arm64_f2b346196cf322ed' with 'oem5.inf'.
     idb:                {Register Driver Package: exit(0x00000000)} 11:41:10.043
     idb:                {Publish Driver Package: C:\Windows\System32\DriverStore\FileRepository\ovpn-dco.inf_arm64_f2b346196cf322ed\ovpn-dco.inf} 11:41:10.043
     idb:                     Activating driver package 'ovpn-dco.inf_arm64_f2b346196cf322ed'.
     cpy:                     Published 'ovpn-dco.inf_arm64_f2b346196cf322ed\ovpn-dco.inf' to 'oem5.inf'.
     idb:                     Indexed 1 device ID for 'ovpn-dco.inf_arm64_f2b346196cf322ed'.
     sto:                     Flushed driver database node 'DRIVERS'. Time = 16 ms
     sto:                     Flushed driver database node 'SYSTEM'. Time = 31 ms
     idb:                {Publish Driver Package: exit(0x00000000)} 11:41:10.088
     sto:                {DRIVERSTORE IMPORT END} 11:41:10.090
     dvi:                     Flushed all driver package files to disk. Time = 0 ms
     sig:                     Installed catalog 'ovpn-dco.cat' as 'oem5.cat'.
     sto:                {DRIVERSTORE IMPORT END: exit(0x00000000)} 11:41:10.173
     sto:           {Core Driver Package Import: exit(0x00000000)} 11:41:10.173
     sto:      {Stage Driver Package: exit(0x00000000)} 11:41:10.175
     sto: {Setup Import Driver Package - exit (0x00000000)} 11:41:10.244
     inf: Driver Store Path: C:\Windows\System32\DriverStore\FileRepository\ovpn-dco.inf_arm64_f2b346196cf322ed\ovpn-dco.inf
     inf: Published Inf Path: C:\Windows\INF\oem5.inf
<<<  Section end 2024/08/22 11:41:10.245
<<<  [Exit status: SUCCESS]

but the second part doesn't work:

>>>  [Device Install (DiInstallDevice) - ROOT\NET\0000]
>>>  Section start 2024/08/22 11:41:19.767
      cmd: "C:\Program Files\xxx\Resources\arm64\tapctl.exe" create --hwid ovpn-dco --name "OpenVPN Data Channel Offload Custom Name"
     ndv: Flags: 0x00000000
     ndv: Search options: 0x00000002
     ndv: Searching default INF path
     dvi: {Build Driver List} 11:41:19.805
     dvi:      Searching for hardware ID(s):
     dvi:           ovpn-dco
     dvi: {Build Driver List - exit(0x00000000)} 11:41:19.964
     dvi: {DIF_SELECTBESTCOMPATDRV} 11:41:19.974
     dvi:      Default installer: Enter 11:41:19.984
     dvi:           {Select Best Driver}
!    dvi:                Selecting driver failed(0xe0000228)
     dvi:           {Select Best Driver - exit(0xe0000228)}
!    dvi:      Default installer: failed
!    dvi:      Error 0xe0000228: There are no compatible drivers for this device.
     dvi: {DIF_SELECTBESTCOMPATDRV - exit(0xe0000228)} 11:41:20.040
!    ndv: Unable to select best compatible driver. Error = 0xe0000228
<<<  Section end 2024/08/22 11:41:20.055
<<<  [Exit status: FAILURE(0xe0000203)]

The user tried to run a command line to get information about the driver
Get-WmiObject Win32_PnPSignedDriver | Where-Object { $_.DeviceName -like "*OpenVPN Data Channel Offload*" } | Format-List *
and got nothing.
Why may it happen? Why does the log state that the driver installed successfully, but it is impossible to find the driver and create a network adapter?

@lstipakov
Copy link
Member

Just tried installing 2.6.12 on my Arm64 dev box, looks good. Here are driver installation logs for comparison:

>>>  [Device Install (DiInstallDevice) - ROOT\NET\0001]
>>>  Section start 2024/09/05 13:39:29.625
      cmd: C:\Windows\System32\MsiExec.exe -Embedding A1249009EF83D9DC3F20002BEA3EFBB4 E Global\MSI0000
     ndv: Flags: 0x00000000
     ndv: Search options: 0x00000002
     ndv: Searching default INF path
     dvi: {Build Driver List} 13:39:29.627
     dvi:      Searching for hardware ID(s):
     dvi:           ovpn-dco
     dvi:      Created Driver Node:
     dvi:           HardwareID   - ovpn-dco
     dvi:           InfName      - C:\WINDOWS\System32\DriverStore\FileRepository\ovpn-dco.inf_arm64_51acf7251abebc91\ovpn-dco.inf
     dvi:           DevDesc      - OpenVPN Data Channel Offload
     dvi:           Section      - ovpn-dco_Device.NT
     dvi:           Rank         - 0x00ff0000
     dvi:           Signer Score - WHQL
     dvi:           DrvDate      - 10/08/2023
     dvi:           Version      - 1.0.0.0
     dvi:      Created Driver Node:
     dvi:           HardwareID   - ovpn-dco
     dvi:           InfName      - C:\WINDOWS\System32\DriverStore\FileRepository\ovpn-dco.inf_arm64_17aed440edc0a3bb\ovpn-dco.inf
     dvi:           DevDesc      - OpenVPN Data Channel Offload
     dvi:           Section      - ovpn-dco_Device.NT
     dvi:           Rank         - 0x00ff0000
     dvi:           Signer Score - WHQL
     dvi:           DrvDate      - 05/22/2024
     dvi:           Version      - 1.2.1.0
     dvi: {Build Driver List - exit(0x00000000)} 13:39:29.687
     dvi: {DIF_SELECTBESTCOMPATDRV} 13:39:29.687
     dvi:      Default installer: Enter 13:39:29.687
     dvi:           {Select Best Driver}
     dvi:                Class GUID of device changed to: {4d36e972-e325-11ce-bfc1-08002be10318}.
     dvi:                Selected Driver:
     dvi:                     Description - OpenVPN Data Channel Offload
     dvi:                     InfFile     - c:\windows\system32\driverstore\filerepository\ovpn-dco.inf_arm64_17aed440edc0a3bb\ovpn-dco.inf
     dvi:                     Section     - ovpn-dco_Device
     dvi:           {Select Best Driver - exit(0x00000000)}
     dvi:      Default installer: Exit
     dvi: {DIF_SELECTBESTCOMPATDRV - exit(0x00000000)} 13:39:29.687
     ndv: Driver package 'C:\WINDOWS\System32\DriverStore\FileRepository\ovpn-dco.inf_arm64_17aed440edc0a3bb\ovpn-dco.inf' is already imported.
     sto: {Setup Import Driver Package: C:\WINDOWS\INF\oem58.inf} 13:39:29.687
     sto:      Driver package already imported as 'oem58.inf'.
     sto: {Setup Import Driver Package - exit (0x00000000)} 13:39:29.687
     dvi: Searching for hardware ID(s):
     dvi:      ovpn-dco
     dvi: Class GUID of device changed to: {4d36e972-e325-11ce-bfc1-08002be10318}.
     ump: {Plug and Play Service: Device Install for ROOT\NET\0001}
     dvi:      Install flags: 0x00010011
     dvi:      {Core Device Install} 13:39:29.703
     dvi:           {Configure Device - ROOT\NET\0001} 13:39:29.719
     dvi:                Device Status: 0x01802001
     dvi:                Parent Device: HTREE\ROOT\0
     sto:                {Configure Driver Package: C:\WINDOWS\System32\DriverStore\FileRepository\ovpn-dco.inf_arm64_17aed440edc0a3bb\ovpn-dco.inf} 13:39:29.719
     sto:                     Source Filter  = ovpn-dco
     inf:                     Config Options = IsolationCompat
     inf:                     Class GUID     = {4d36e972-e325-11ce-bfc1-08002be10318}
     inf:                     Class Options  = Configurable
     inf:                     {Configure Driver: OpenVPN Data Channel Offload}
     inf:                          Section Name = ovpn-dco_Device.NT
     inf:                          {Add Service: ovpn-dco}
     inf:                               Flags         = 0x2
     inf:                               Start Type    = 3
     inf:                               Service Type  = 1
     inf:                               Error Control = 1
     inf:                               Image Path    = \SystemRoot\System32\drivers\ovpn-dco.sys
     inf:                               Display Name  = ovpn-dco
     inf:                               Updated service 'ovpn-dco'.
     inf:                          {Add Service: exit(0x00000000)}
     inf:                          Hardware Id  = ovpn-dco
     inf:                          {Configure Driver Configuration: ovpn-dco_Device.NT}
     inf:                               Service Name  = ovpn-dco
     inf:                               Config Flags  = 0x00000000
     inf:                          {Configure Driver Configuration: exit(0x00000000)}
     inf:                     {Configure Driver: exit(0x00000000)}
     flq:                     {FILE_QUEUE_COMMIT} 13:39:29.735
     flq:                          Copying 'C:\WINDOWS\System32\DriverStore\FileRepository\ovpn-dco.inf_arm64_17aed440edc0a3bb\ovpn-dco.sys' to 'C:\WINDOWS\System32\drivers\ovpn-dco.sys'.
     idb:                          Last driver package 'ovpn-dco.inf_arm64_51acf7251abebc91' to copy 'C:\WINDOWS\System32\drivers\ovpn-dco.sys' needs reconfiguration.
     flq:                     {FILE_QUEUE_COMMIT - exit(0x00000000)} 13:39:29.751
     dvi:                     Existing files modified, may need to restart related services.
     sto:                {Configure Driver Package: exit(0x00000bc3)} 13:39:29.751
     dvi:                Restart required for any devices using this driver.
     dvi:                Install Device: Configuring device. 13:39:29.751
     dvi:                     Configuration: oem58.inf:ovpn-dco,ovpn-dco_Device
     dvi:                Install Device: Configuring device completed. 13:39:29.758
     dvi:                Device Status: 0x01802001
     dvi:                {Restarting Devices} 13:39:29.758
     dvi:                     Start: ROOT\NET\0001
!    dvi:                     Device 'ROOT\NET\0001' pending start: Device has problem: 0x38 (CM_PROB_NEED_CLASS_CONFIG), problem status: 0x00000000.
     dvi:                {Restarting Devices exit} 13:39:29.783
     dvi:           {Configure Device - exit(0x00000000)} 13:39:29.783
     dvi:      {Core Device Install - exit(0x00000000)} 13:39:29.783
     dvi:      Waiting for device post-install to complete. 13:39:29.788
     dvi:      Device post-install completed. 13:39:29.923
     dvi:      Device Status: 0x0180200b
     ump: {Plug and Play Service: Device Install exit(00000000)}
<<<  Section end 2024/09/05 13:39:29.949
<<<  [Exit status: SUCCESS]


>>>  [Device Install (DiInstallDevice) - ROOT\NET\0002]
>>>  Section start 2024/09/05 13:42:51.215
      cmd: "C:\Program Files\OpenVPN\bin\tapctl.exe" create --hwid ovpn-dco --name "OpenVPN Data Channel Offload Custom Name"
     ndv: Flags: 0x00000000
     ndv: Search options: 0x00000002
     ndv: Searching default INF path
     dvi: {Build Driver List} 13:42:51.231
     dvi:      Searching for hardware ID(s):
     dvi:           ovpn-dco
     dvi:      Created Driver Node:
     dvi:           HardwareID   - ovpn-dco
     dvi:           InfName      - C:\WINDOWS\System32\DriverStore\FileRepository\ovpn-dco.inf_arm64_51acf7251abebc91\ovpn-dco.inf
     dvi:           DevDesc      - OpenVPN Data Channel Offload
     dvi:           Section      - ovpn-dco_Device.NT
     dvi:           Rank         - 0x00ff0000
     dvi:           Signer Score - WHQL
     dvi:           DrvDate      - 10/08/2023
     dvi:           Version      - 1.0.0.0
     dvi:      Created Driver Node:
     dvi:           HardwareID   - ovpn-dco
     dvi:           InfName      - C:\WINDOWS\System32\DriverStore\FileRepository\ovpn-dco.inf_arm64_17aed440edc0a3bb\ovpn-dco.inf
     dvi:           DevDesc      - OpenVPN Data Channel Offload
     dvi:           Section      - ovpn-dco_Device.NT
     dvi:           Rank         - 0x00ff0000
     dvi:           Signer Score - WHQL
     dvi:           DrvDate      - 05/22/2024
     dvi:           Version      - 1.2.1.0
     dvi: {Build Driver List - exit(0x00000000)} 13:42:51.533
     dvi: {DIF_SELECTBESTCOMPATDRV} 13:42:51.533
     dvi:      Default installer: Enter 13:42:51.549
     dvi:           {Select Best Driver}
     dvi:                Class GUID of device changed to: {4d36e972-e325-11ce-bfc1-08002be10318}.
     dvi:                Selected Driver:
     dvi:                     Description - OpenVPN Data Channel Offload
     dvi:                     InfFile     - c:\windows\system32\driverstore\filerepository\ovpn-dco.inf_arm64_17aed440edc0a3bb\ovpn-dco.inf
     dvi:                     Section     - ovpn-dco_Device
     dvi:           {Select Best Driver - exit(0x00000000)}
     dvi:      Default installer: Exit
     dvi: {DIF_SELECTBESTCOMPATDRV - exit(0x00000000)} 13:42:51.596
     ndv: Driver package 'C:\WINDOWS\System32\DriverStore\FileRepository\ovpn-dco.inf_arm64_17aed440edc0a3bb\ovpn-dco.inf' is already imported.
     sto: {Setup Import Driver Package: C:\WINDOWS\INF\oem58.inf} 13:42:51.612
     sto:      Driver package already imported as 'oem58.inf'.
     sto: {Setup Import Driver Package - exit (0x00000000)} 13:42:51.629
     dvi: Searching for hardware ID(s):
     dvi:      ovpn-dco
     dvi: Class GUID of device changed to: {4d36e972-e325-11ce-bfc1-08002be10318}.
     ump: {Plug and Play Service: Device Install for ROOT\NET\0002}
     dvi:      Install flags: 0x00010001
     dvi:      {Core Device Install} 13:42:51.706
     dvi:           {Configure Device - ROOT\NET\0002} 13:42:51.706
     dvi:                Device Status: 0x01802001
     dvi:                Parent Device: HTREE\ROOT\0
     sto:                {Configure Driver Package: C:\WINDOWS\System32\DriverStore\FileRepository\ovpn-dco.inf_arm64_17aed440edc0a3bb\ovpn-dco.inf} 13:42:51.706
     sto:                     Source Filter  = ovpn-dco
     inf:                     Config Options = IsolationCompat
     inf:                     Class GUID     = {4d36e972-e325-11ce-bfc1-08002be10318}
     inf:                     Class Options  = Configurable
     inf:                     {Configure Driver: OpenVPN Data Channel Offload}
     inf:                          Section Name = ovpn-dco_Device.NT
     inf:                          {Add Service: ovpn-dco}
     inf:                               Flags         = 0x2
     inf:                               Start Type    = 3
     inf:                               Service Type  = 1
     inf:                               Error Control = 1
     inf:                               Image Path    = \SystemRoot\System32\drivers\ovpn-dco.sys
     inf:                               Display Name  = ovpn-dco
     inf:                               Updated service 'ovpn-dco'.
     inf:                          {Add Service: exit(0x00000000)}
     inf:                          Hardware Id  = ovpn-dco
     inf:                          {Configure Driver Configuration: ovpn-dco_Device.NT}
     inf:                               Service Name  = ovpn-dco
     inf:                               Config Flags  = 0x00000000
     inf:                          {Configure Driver Configuration: exit(0x00000000)}
     inf:                     {Configure Driver: exit(0x00000000)}
     flq:                     {FILE_QUEUE_COMMIT} 13:42:51.722
     flq:                          Copying 'C:\WINDOWS\System32\DriverStore\FileRepository\ovpn-dco.inf_arm64_17aed440edc0a3bb\ovpn-dco.sys' to 'C:\WINDOWS\System32\drivers\ovpn-dco.sys'.
     cpy:                          Existing file 'C:\WINDOWS\System32\drivers\ovpn-dco.sys' remains unchanged.
     flq:                     {FILE_QUEUE_COMMIT - exit(0x00000000)} 13:42:51.738
     sto:                {Configure Driver Package: exit(0x00000000)} 13:42:51.738
     dvi:                Install Device: Configuring device. 13:42:51.738
     dvi:                     Configuration: oem58.inf:ovpn-dco,ovpn-dco_Device
     dvi:                Install Device: Configuring device completed. 13:42:51.738
     dvi:                Device Status: 0x01802001
     dvi:                Install Device: Starting device 'ROOT\NET\0002'. 13:42:51.738
     dvi:                Install Device: Starting device completed. 13:42:51.738
!    dvi:                Device pending start: Device has problem: 0x38 (CM_PROB_NEED_CLASS_CONFIG), problem status: 0x00000000.
     dvi:           {Configure Device - exit(0x00000000)} 13:42:51.750
     dvi:      {Core Device Install - exit(0x00000000)} 13:42:51.753
     dvi:      Waiting for device post-install to complete. 13:42:51.757
     dvi:      Device post-install completed. 13:42:51.877
     dvi:      Device Status: 0x0180200b
     ump: {Plug and Play Service: Device Install exit(00000000)}
<<<  Section end 2024/09/05 13:42:51.912
<<<  [Exit status: SUCCESS]

As you may see, your driver installation log looks somewhat different. You are installing from C:\Program Files\Common Files\ovpn-dco\Win11\ovpn-dco.inf, but you are supposed to install from the driver store, to where custom action copies the driver:

    /* copy driver to driver store */
    if (!SetupCopyOEMInfW(pathToInf, NULL, SPOST_PATH, 0, NULL, 0, NULL, NULL)) {
        msg(M_NONFATAL | M_ERRNO, "%s: SetupCopyOEMInf(\"%ls\") failed", __FUNCTION__, pathToInf);
        return;
    }

Does it work if user installs OpenVPN 2.6.12 ?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants