Windows NT is an object-based system. Various components in the executive define one or more object types. Each NT component exports kernel-mode-only support routines that manipulate instances of its object types when these routines are called. No NT component is allowed to access any instance of another component’s object types directly. Each component must call the exported support routines in order to use another component’s objects.
Strict adherence to these conventions allows Windows NT to be both portable and flexible. For example, a future release of Windows NT could contain a wholly or partially recoded NT Kernel component that defines the same object types, possibly with entirely different internal structures, and exports a set of support routines with the same names and parameters as the existing set. Such a new version of the NT Kernel would have no effect on the portability of any other executive component in the existing system. In other words, the NT components do not practice back-door communication, and NT drivers also must eschew this practice in order to remain portable and configurable.
NT drivers and their devices are also object-based. To all other components in the system, including user-mode code, a device is represented as one of the NT I/O Manager’s file objects. Within the I/O system, each driver’s logical, virtual, and/or physical devices are represented as device objects. Within the I/O Manager, each NT driver’s load image is represented as a driver object. The I/O Manager defines the object types for file objects, device objects, and driver objects, as well as for adapter objects to represent system DMA controllers or busmaster DMA adapters and for controller objects to represent a physical controller for similar devices.
Like any other executive component, NT drivers use NT objects by calling kernel-mode support routines exported by the I/O Manager and other NT components. NT kernel-mode support routines generally have names that identify the specific object each manipulates and the operation each performs on that object. These support routine names have the form:
PrefixOperationObject
where
Prefix
Identifies the NT component that exports the routine and, usually, the component that defined the object type. Most prefixes have two letters.
Operation
Describes what is done to the object.
Object
Identifies the type of object.
For example, IoCreateDevice, which each NT driver calls one or more times when it initializes, creates a device object to represent a physical, logical, or virtual device.
For convenience, one NT component can export routines that call another component’s support routines. The I/O Manager, in particular, exports certain routines that make it easier to develop NT drivers. For example, IoConnectInterrupt, which device drivers call at initialization to register their ISRs, calls the NT Kernel’s support routines for interrupt objects.
The Glossary contains definitions for the set of NT objects most useful to NT driver writers. For detailed information about the support routines that are most useful to NT device and intermediate drivers, see the Kernel-mode Driver Reference.