Our embedded programmer designed the virtual serial port driver wrapper for our mobile equipment, and I populated methods to make it work. The driver works as expected, it simulates a COM port for a USB device that spews NMEA lines (GPS data).
I print WM6 for short, but the OS is WM6.1, if that matters.
The problem that I encountered is that the driver does not load when the device starts only on WM6. The driver was developed for both CE5 and WM6, but in CE5 the driver loads at boot, which indicates a WM6 configuration problem. It may be worth noting that at this moment the driver will load into WM6 and CE5 using the ActivateDevice () method, this is what I have used so far for WM6, a small test application to run the driver so that I can at least test the driver working on WM6.
The registry is already filled with the necessary keys to start the driver. Therefore, the driver should load at startup without any problems. HKEY_LOCAL_MACHINE \ Drivers \ BuiltIn contains an additional key A36D_GPS_COM and is contained in this key.
DeviceArrayIndex: 0
DeviceType: 0
Dll: A36D.dll
Flags: 0
Friendly Name: GPS A36D COM Port
Index: 8
Order: 3
Prefix: COM
Priority: 0
Priority: 256
From what I can say, there are usually two general answers to this question that I have already explored. These ideas were provided to me by the embedded programmer, but I researched how to do this myself.
1) The COM port is already used when the driver tries to load, even if this COM port is ultimately free after the device boots up. I changed the index value in the registry from 1 to 20 and rebooted the device, and the driver does not load on the specified COM port. Therefore, for more thorough testing, I moved another device from COM9 to COM8 and moved my driver to COM9 (using the above registry settings). Another device driver loads quite happily on startup on COM8, but my device driver doesn't load on COM9. I even tried to configure other settings, but it does not load at boot time.
2) Other possible problems and differences between CE5 and WM6 are security. Thus, using the MSDN article http://msdn.microsoft.com/en-us/library/bb737570.aspx I worked on signing and creating XML. Using the preferred key (has not expired), A36D.dll is signed in the visual studio, and the created CAB file for installation is also signed with the same key. The _setup.xml file is created and added to the cabin file so that the signed key is added to the certificate store. The CAB file is again signed with the same key to ensure that it is still valid. In addition, _setup.xml is packaged in its own .CPF file. Both CAB and CPF files add the key to the certificate stores "HKEY_LOCAL_MACHINE \ Comm \ Security \ SystemCertificates", so be aware that this works. As a caution, I installed it in Privileged, Unprivileged, ROOT, and SPC certificate stores. But the device driver still does not load into the device.exe file when the mobile device boots.
Besides the workaround of the launching application that calls ActivateDevice () in the driver, I donβt understand how to load this driver at startup.
I find it very strange that it works in CE5, but not in WM6, I just donβt know anything else that could cause problems.
Does anyone have any additional suggestions that you can try.
All help was appreciated.