|
Ports via NativeCOM to the NT system. How does your application know which ports have been defined in the system? The answer: the Windows NT Registry.
The Windows NT registry's hardware devicemap contains the COM ports defined in the system. You can see this key using regedit or regedt32. For example:
HKEY_LOCAL_MACHINE HARDWARE DEVICEMAP SERIALCOMM Serial0 REG_SZ COM1 Serial1 REG_SZ COM2 Rcs0Serial3 REG_SZ COM3 Rcs0Serial4 REG_SZ COM4
In this case, there are two serial ports built in to the machine, and at least three NativeCOM serial ports defined (these are identified as "RcsmSerialn"). The only part your application needs to know about is the "value" of the registry entries ("COM3" for instance)
The following "C" code example illustrates how your application might traverse the Registry to find this information so it can display it for your user.
// // Example program to retrieve all the COM port names from the NT Registry // #include #include // // This example stores the found COM names in this array. Your application // may have some other place it wants to have COM names stored. // char CommList[256][64]; int GetCommList(void) { DWORD resVal; HKEY hSerialCommKey = NULL; DWORD i, status; DWORD keyType, nameBufSize, dataBufSize; UCHAR valueKeyName[64], valueKeyData[64]; // // First - Get access to the registry key we need // resVal = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "HARDWARE\\DEVICEMAP\\SERIALCOMM", 0, KEY_READ, &hSerialCommKey); // // If successful, read all the registry entries under this key if( resVal == ERROR_SUCCESS ) { for( i = 0;; i++ ) { nameBufSize = dataBufSize = 64; status = RegEnumValue( hSerialCommKey, i, (CHAR *)valueKeyName, &nameBufSize, NULL, &keyType, (UCHAR *)valueKeyData, &dataBufSize ); // // If we got something, the value of the key is the COM name // otherwise we've come to the end of the list. // if (status == ERROR_SUCCESS) strcpy(CommList[i], (const char *)valueKeyData); else break; } // // Done, close down the registry before returning // RegCloseKey(hSerialCommKey); // // And return the number we found // return i; } else return -1; // Return -1 as an error if we can't access the registry} void main(void) { DWORD count; DWORD i; if((count = GetCommList()) >= 0) { printf("Found %d COM ports\n", count); for (i = 0; i < count; i++) printf("%s\n", CommList[i]); } }
After reviewing this application note, if you have questions or require additional information, please contact our technical support group at
This e-mail address is being protected from spambots. You need JavaScript enabled to view it
.
|