Home   |   Jungo Corporate Web Site   |   Connectivity Software Store   |   Contact us   |   Search:
Home Connectivity Software Support WinDriver Support Technical Documents

Technical Document #45



Doc ID: 45
Product: WinDriver
Version:  --

What are the COPY_TO_USER_OR_KERNEL and COPY_FROM_USER_OR_KERNEL macros and when should they be used?

The COPY_TO_USER_OR_KERNEL and COPY_FROM_USER_OR_KERNEL macros are used for copying data (when necessary) to/from user-mode memory addresses (respectively), when accessing such addresses from within the Kernel PlugIn. Copying the data ensures that the user-mode address can be used correctly, even if the context of the user-mode process changes in the midst of the I/O operation. This is particularly relevant for long operations, during which the context of the user-mode process might change. The use of macros to perform the copy provides a generic cross-platform solution for all supported operating systems.

Note that if you wish to access the user-mode data from within the KP_IntAtIrql() or KP_IntAtDpc() functions, you should copy the data into a Kernel PlugIn variable before the execution of these routines.

The COPY_TO_USER_OR_KERNEL and COPY_FROM_USER_OR_KERNEL macros are defined in the WinDriver/include/kpstdlib.h header file.

For an example of using the COPY_TO_USER_OR_KERNEL macro, see the implementation of the KP_Call() function in the generated DriverWizard Kernel PlugIn code (see kp_xxx.c) and in WinDriver's Kernel PlugIn sample (KP_PCI (v7.00+) - WinDriver/samples/pci_diag/kp_pci/kp_pci.c / KP_TEST (v6.23-) - WinDriver/kerplug/kptestkermode/kptest.c).

To share a data buffer between the user-mode and Kernel PlugIn routines (e.g. KpIntAtIrql() & KpIntAtDpc()), consider using the technique outlined in Technical Document #41.

Back to Top

WinDriver, Kernel PlugIn, PCI, PCMCIA, ISA, memory access, IO access, macros, data copy, COPY_TO_USER_OR_KERNEL, COPY_FROM_USER_OR_KERNEL, data passing, API, KP_IntAtIrql, KP_IntAtDpc, KP_Call, kpstdlib.h, kptest, version 5.20