[Com0com-cvs] com0com/sys adddev.c,1.19,1.20 com0com.h,1.29,1.30
The virtual serial port driver for Windows.
Brought to you by:
vfrolov
From: Vyacheslav F. <vf...@us...> - 2006-10-16 08:30:55
|
Update of /cvsroot/com0com/com0com/sys In directory sc8-pr-cvs4.sourceforge.net:/tmp/cvs-serv16680 Modified Files: adddev.c com0com.h Log Message: Added the device interface registration Index: adddev.c =================================================================== RCS file: /cvsroot/com0com/com0com/sys/adddev.c,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -d -r1.19 -r1.20 *** adddev.c 13 Oct 2006 10:22:22 -0000 1.19 --- adddev.c 16 Oct 2006 08:30:45 -0000 1.20 *************** *** 20,23 **** --- 20,26 ---- * * $Log$ + * Revision 1.20 2006/10/16 08:30:45 vfrolov + * Added the device interface registration + * * Revision 1.19 2006/10/13 10:22:22 vfrolov * Changed name of device object (for WMI) *************** *** 83,86 **** --- 86,91 ---- #include "precomp.h" + #include <initguid.h> + #include <ntddser.h> #include "timeout.h" #include "delay.h" *************** *** 113,129 **** IoWMIRegistrationControl(pDevExt->pDevObj, WMIREG_ACTION_DEREGISTER); ! if (pDevExt->mappedSerialDevice) RtlDeleteRegistryValue(RTL_REGISTRY_DEVICEMAP, C0C_SERIAL_DEVICEMAP, pDevExt->ntDeviceName.Buffer); ! if (pDevExt->createdSymbolicLink) IoDeleteSymbolicLink(&pDevExt->win32DeviceName); if (pDevExt->pLowDevObj) IoDetachDevice(pDevExt->pLowDevObj); - StrFree(&pDevExt->win32DeviceName); - StrFree(&pDevExt->ntDeviceName); - Trace0((PC0C_COMMON_EXTENSION)pDevExt, L"RemoveFdoPort"); --- 118,140 ---- IoWMIRegistrationControl(pDevExt->pDevObj, WMIREG_ACTION_DEREGISTER); ! if (pDevExt->symbolicLinkName.Buffer) { ! IoSetDeviceInterfaceState(&pDevExt->symbolicLinkName, FALSE); ! RtlFreeUnicodeString(&pDevExt->symbolicLinkName); ! } ! ! if (pDevExt->ntDeviceName.Buffer) { RtlDeleteRegistryValue(RTL_REGISTRY_DEVICEMAP, C0C_SERIAL_DEVICEMAP, pDevExt->ntDeviceName.Buffer); + StrFree(&pDevExt->ntDeviceName); + } ! if (pDevExt->win32DeviceName.Buffer) { IoDeleteSymbolicLink(&pDevExt->win32DeviceName); + StrFree(&pDevExt->win32DeviceName); + } if (pDevExt->pLowDevObj) IoDetachDevice(pDevExt->pLowDevObj); Trace0((PC0C_COMMON_EXTENSION)pDevExt, L"RemoveFdoPort"); *************** *** 139,143 **** PC0C_PDOPORT_EXTENSION pPhDevExt; ULONG emuBR, emuOverrun; ! UNICODE_STRING property; PWCHAR pPortName; --- 150,154 ---- PC0C_PDOPORT_EXTENSION pPhDevExt; ULONG emuBR, emuOverrun; ! UNICODE_STRING ntDeviceName; PWCHAR pPortName; *************** *** 145,151 **** pDevExt = NULL; RtlInitUnicodeString(&portName, NULL); ! RtlInitUnicodeString(&property, NULL); ! StrAppendDeviceProperty(&status, &property, pPhDevObj, DevicePropertyPhysicalDeviceObjectName); if (!NT_SUCCESS(status)) { --- 156,162 ---- pDevExt = NULL; RtlInitUnicodeString(&portName, NULL); ! RtlInitUnicodeString(&ntDeviceName, NULL); ! StrAppendDeviceProperty(&status, &ntDeviceName, pPhDevObj, DevicePropertyPhysicalDeviceObjectName); if (!NT_SUCCESS(status)) { *************** *** 162,166 **** } ! Trace00((PC0C_COMMON_EXTENSION)pPhDevExt, L"AddFdoPort for ", property.Buffer); pPortName = pPhDevExt->portName; --- 173,177 ---- } ! Trace00((PC0C_COMMON_EXTENSION)pPhDevExt, L"AddFdoPort for ", ntDeviceName.Buffer); pPortName = pPhDevExt->portName; *************** *** 277,281 **** NULL, FILE_DEVICE_SERIAL_PORT, ! 0, TRUE, &pNewDevObj); --- 288,292 ---- NULL, FILE_DEVICE_SERIAL_PORT, ! FILE_DEVICE_SECURE_OPEN, TRUE, &pNewDevObj); *************** *** 291,301 **** status = InitCommonExt((PC0C_COMMON_EXTENSION)pDevExt, pNewDevObj, C0C_DOTYPE_FP, portName.Buffer); - RtlInitUnicodeString(&pDevExt->ntDeviceName, NULL); - StrAppendStr0(&status, &pDevExt->ntDeviceName, property.Buffer); - - RtlInitUnicodeString(&pDevExt->win32DeviceName, NULL); - StrAppendStr0(&status, &pDevExt->win32DeviceName, C0C_PREF_WIN32_DEVICE_NAME); - StrAppendStr0(&status, &pDevExt->win32DeviceName, portName.Buffer); - if (!NT_SUCCESS(status)) { SysLog(pPhDevObj, status, L"AddFdoPort FAIL"); --- 302,305 ---- *************** *** 342,379 **** SetWriteDelay(pDevExt->pIoPortLocal); ! status = IoCreateSymbolicLink(&pDevExt->win32DeviceName, &pDevExt->ntDeviceName); ! if (!NT_SUCCESS(status)) { ! SysLog(pPhDevObj, status, L"AddFdoPort IoCreateSymbolicLink FAIL"); goto clean; } ! pDevExt->createdSymbolicLink = TRUE; ! status = RtlWriteRegistryValue(RTL_REGISTRY_DEVICEMAP, C0C_SERIAL_DEVICEMAP, ! pDevExt->ntDeviceName.Buffer, REG_SZ, ! portName.Buffer, ! portName.Length + sizeof(WCHAR)); ! if (!NT_SUCCESS(status)) { ! SysLog(pPhDevObj, status, L"AddFdoPort RtlWriteRegistryValue FAIL"); ! goto clean; } ! pDevExt->mappedSerialDevice = TRUE; ! pDevExt->pPhDevObj = pPhDevObj; ! pDevExt->pLowDevObj = IoAttachDeviceToDeviceStack(pNewDevObj, pPhDevObj); ! if (!pDevExt->pLowDevObj) { ! status = STATUS_NO_SUCH_DEVICE; ! SysLog(pPhDevObj, status, L"AddFdoPort IoAttachDeviceToDeviceStack FAIL"); ! goto clean; } ! pNewDevObj->Flags &= ~DO_DEVICE_INITIALIZING; ! pNewDevObj->Flags |= DO_BUFFERED_IO; ! IoWMIRegistrationControl(pNewDevObj, WMIREG_ACTION_REGISTER); Trace0((PC0C_COMMON_EXTENSION)pDevExt, L"AddFdoPort OK"); --- 346,418 ---- SetWriteDelay(pDevExt->pIoPortLocal); ! pDevExt->pPhDevObj = pPhDevObj; ! pDevExt->pLowDevObj = IoAttachDeviceToDeviceStack(pNewDevObj, pPhDevObj); ! if (!pDevExt->pLowDevObj) { ! status = STATUS_NO_SUCH_DEVICE; ! SysLog(pPhDevObj, status, L"AddFdoPort IoAttachDeviceToDeviceStack FAIL"); goto clean; } ! pNewDevObj->Flags &= ~DO_DEVICE_INITIALIZING; ! pNewDevObj->Flags |= DO_BUFFERED_IO; ! /* Create symbolic links to device */ ! RtlInitUnicodeString(&pDevExt->ntDeviceName, NULL); ! StrAppendStr0(&status, &pDevExt->ntDeviceName, ntDeviceName.Buffer); ! ! RtlInitUnicodeString(&pDevExt->win32DeviceName, NULL); ! StrAppendStr0(&status, &pDevExt->win32DeviceName, C0C_PREF_WIN32_DEVICE_NAME); ! StrAppendStr0(&status, &pDevExt->win32DeviceName, portName.Buffer); ! ! if (NT_SUCCESS(status)) { ! status = IoCreateSymbolicLink(&pDevExt->win32DeviceName, &pDevExt->ntDeviceName); ! ! if (NT_SUCCESS(status)) { ! status = RtlWriteRegistryValue(RTL_REGISTRY_DEVICEMAP, C0C_SERIAL_DEVICEMAP, ! pDevExt->ntDeviceName.Buffer, REG_SZ, ! portName.Buffer, ! portName.Length + sizeof(WCHAR)); ! ! if (!NT_SUCCESS(status)) { ! StrFree(&pDevExt->ntDeviceName); ! ! SysLog(pPhDevObj, status, L"AddFdoPort RtlWriteRegistryValue" C0C_SERIAL_DEVICEMAP L" FAIL"); ! } ! } else { ! StrFree(&pDevExt->win32DeviceName); ! StrFree(&pDevExt->ntDeviceName); ! ! SysLog(pPhDevObj, status, L"AddFdoPort IoCreateSymbolicLink FAIL"); ! } ! } else { ! StrFree(&pDevExt->win32DeviceName); ! StrFree(&pDevExt->ntDeviceName); ! ! SysLog(pPhDevObj, status, L"AddFdoPort StrAppendStr0 FAIL"); } ! status = IoRegisterDeviceInterface(pPhDevObj, ! (LPGUID)&GUID_CLASS_COMPORT, ! NULL, ! &pDevExt->symbolicLinkName); ! if (NT_SUCCESS(status)) { ! status = IoSetDeviceInterfaceState(&pDevExt->symbolicLinkName, TRUE); ! if (!NT_SUCCESS(status)) ! SysLog(pPhDevObj, status, L"AddFdoPort IoSetDeviceInterfaceState FAIL"); ! } else { ! SysLog(pPhDevObj, status, L"AddFdoPort IoRegisterDeviceInterface FAIL"); ! pDevExt->symbolicLinkName.Buffer = NULL; } ! status = IoWMIRegistrationControl(pNewDevObj, WMIREG_ACTION_REGISTER); ! if (!NT_SUCCESS(status)) ! SysLog(pPhDevObj, status, L"AddFdoPort IoWMIRegistrationControl FAIL"); ! ! status = STATUS_SUCCESS; Trace0((PC0C_COMMON_EXTENSION)pDevExt, L"AddFdoPort OK"); *************** *** 384,388 **** RemoveFdoPort(pDevExt); ! StrFree(&property); StrFree(&portName); --- 423,427 ---- RemoveFdoPort(pDevExt); ! StrFree(&ntDeviceName); StrFree(&portName); Index: com0com.h =================================================================== RCS file: /cvsroot/com0com/com0com/sys/com0com.h,v retrieving revision 1.29 retrieving revision 1.30 diff -C2 -d -r1.29 -r1.30 *** com0com.h 13 Oct 2006 10:15:02 -0000 1.29 --- com0com.h 16 Oct 2006 08:30:45 -0000 1.30 *************** *** 20,23 **** --- 20,26 ---- * * $Log$ + * Revision 1.30 2006/10/16 08:30:45 vfrolov + * Added the device interface registration + * * Revision 1.29 2006/10/13 10:15:02 vfrolov * Some defines moved to ../include/com0com.h *************** *** 259,264 **** UNICODE_STRING ntDeviceName; UNICODE_STRING win32DeviceName; ! BOOLEAN createdSymbolicLink; ! BOOLEAN mappedSerialDevice; LONG openCount; --- 262,266 ---- UNICODE_STRING ntDeviceName; UNICODE_STRING win32DeviceName; ! UNICODE_STRING symbolicLinkName; LONG openCount; |