6 Appendix A: Product Behavior
The information in this specification is applicable to the following Microsoft products or supplemental software. References to product versions include released service packs.
Windows 2000 operating system
Windows XP operating system
Windows Server 2003 operating system
Windows Vista operating system
Windows Server 2008 operating system
Windows 7 operating system
Windows Server 2008 R2 operating system
Windows 8 operating system
Windows Server 2012 operating system
Windows 8.1 operating system
Windows Server 2012 R2 operating system
Windows 10 operating system
Windows Server 2016 operating system
Exceptions, if any, are noted below. If a service pack or Quick Fix Engineering (QFE) number appears with the product version, behavior changed in that service pack or QFE. The new behavior also applies to subsequent service packs of the product unless otherwise specified. If a product edition appears with the product version, behavior is different in that product edition.
Unless otherwise specified, any statement of optional behavior in this specification that is prescribed using the terms SHOULD or SHOULD NOT implies product behavior in accordance with the SHOULD or SHOULD NOT prescription. Unless otherwise specified, the term MAY implies that the product does not follow the prescription.
<1> Section 188.8.131.52: The Windows server implementation uses symbolic link names with standard naming conventions, in order to ensure compatibility with most Windows applications and drivers that access ports.
For serial ports, Windows assigns a symbolic link name that uses the standard naming convention "COM<n>", where <n> is the COM port number.
For parallel ports, Windows assigns a symbolic link name that uses the standard naming convention "LPT<n>", where <n> is the LPT port number.
For more information on port naming conventions, see [MSDN-PORTS].
<2> Section 184.108.40.206.6: Windows Implementations use IOCTL constants for IoControlCode values. The content and values of the IOCTLs are opaque to the protocol. On the server side, the data contained in an IOCTL is simply packaged and sent to the client side. For maximum compatibility between the different versions of the Windows operating system, the client implementation only singles out critical IOCTLs and invokes the applicable Win32 port API. The other IOCTLS are passed directly to the client-side driver, and the processing of this value depends on the drivers installed on the client side. The values and parameters for these IOCTLS can be found in [MSFT-WDDK] and in [MSDN-PORTS].
The parameters of the device request/response are mapped to the IOCTL as described in [MSDN-PORTS] as follows:
If an IOCTL requires input, then the AssociatedIrp.SystemBuffer is set to the content of InputBuffer field and the InputBufferSize field is assigned to Parameters.DeviceIoControl.InputBufferLength.
If an IOCTL requires output, then the Parameters.DeviceIoControl.OutputBufferLength is filled with the value of OutputBufferLength of the request. The OutputBuffer field in the response contains the data from AssociatedIrp.SystemBuffer, and the OutputBufferLength in the response is set to the returned value in the Information field of the I/O Status Block.
The IoStatus field of the response contains the returned NTSTATUS code from the IOCTL.
For more information about device type values, see [MSDN-DeviceTypes].
For more information about I/O control codes and the CTL_CODE macro, see [MSDN-IoCtlCodes].