WinDriver supports driver development for the following 64-bit
architectures:
- Windows AMD64 or Intel EM64T (x64)
- Linux AMD64 or Intel EM64T (x86_64)
By default, applications created using the 64-bit versions of WinDriver are
64-bit applications. Such applications are more efficient than 32-bit
applications. However, you can also use the 64-bit versions of WinDriver to
create 32-bit applications that will run on the supported 64-bit platforms.
This document outlines two methods for creating such applications:
NOTE
In the following documentation
- <WD64> signifies the path to a 64-bit WinDriver
installation directory for your target operating system (e.g.,
C:\WinDriver64), and <WD32> signifies the path to a
32-bit WinDriver installation directory for the same operating system
(e.g., C:\WinDriver).
- <ver> signifies the version of the WinDriver installation
that you are using — for example, 10.2.1 for
version 10.2.1.
Developing a 32-bit WinDriver Application for 64-bit Platforms
To create a 32-bit WinDriver application for 64-bit platforms, using a 64-bit
WinDriver installation, do the following:
- Create a WinDriver application, as outlined in the WinDriver User's
Manual — for example, by generating code with DriverWizard, or
using one of the WinDriver samples.
- Build the application with an appropriate 32-bit compiler for your
target operating system, using the following configuration:
- Add the KERNEL_64BIT
preprocessor definition.
NOTE
In the makefiles, the definition is added using the
-D flag:
-DKERNEL_64BIT.
The sample and wizard-generated Linux makefiles and Windows
MS Visual Studio projects, in the 64-bit WinDriver toolkit,
already add this definition.
- Link the application with the specific version of the WinDriver
API library/shared object for 32-bit applications executed on
64-bit platforms --
<WD64>\lib\amd64\x86\wdapi<ver>.lib on
Windows (e.g.,
C:\WinDriver64\lib\amd64\x86\wdapi10.2.1.lib)
/ <WD64>/lib/libwdapi<ver>_32.so on Linux
(e.g.,
/c/WinDriver64/lib/libwdapi10.2.1_32.so).
On Linux, the installation of the 64-bit WinDriver toolkit on
the development machine creates a libwdapi<ver>.so
symbolic link in the /usr/lib directory — which
links to
<WD64>/lib/libwdapi<ver>_32.so — and
in the /usr/lib64 directory — which links to
<WD64>/lib/libwdapi<ver>_32.so (the 64-bit
version of this shared object).
The sample and wizard-generated WinDriver makefiles rely on
these symbolic links to link with the appropriate shared object,
depending on whether the code is compiled using a 32-bit or
64-bit compiler.
On Windows, the sample and wizard-generated MS Visual Studio
projects are defined to link with wdapi<ver>.lib
(see the
AdditionalDependencies),
but the linker library path refers to the 64-bit library file
in the <WD64>\lib\amd64 directory (see
AdditionalLibraryDirectories
); when using such a project to compile a 32-bit
application for 64-bit platforms, add \x86 to the
library path in order to link the code with
<WD64>\lib\amd64\x86\wdapi<ver>.lib.
NOTE
- When distributing your application to target 64-bit platforms, you need
to provide with it the WinDriver API DLL/shared object for 32-bit
applications executed on 64-bit platforms —
<WD64>\redist\wdapi<ver>_32.dll on Windows (e.g.,
C:\WinDriver64\redist\wdapi10.2.1_32.dll) /
<WD64>/lib/libwdapi<ver>_32.so on Linux (e.g.,
/c/WinDriver64/lib/libwdapi10.2.1_32.so).
Before distributing this file, rename the copy of the file in your
distribution package by removing the _32 portion. The
installation on the target should copy the renamed DLL/shared object to
the relevant OS directory — %windir%\sysWOW64 on Windows or
/usr/lib on Linux. All other distribution files are the same as
for any other 64-bit WinDriver driver distribution, as detailed in the
WinDriver distribution instructions in the manuals.
- An application created using this method will not work on 32-bit
platforms. A WinDriver application for 32-bit platforms needs to be
compiled without the KERNEL_64BIT
definition; it needs to be linked with the standard 32-bit version of
the WinDriver API library/shared object from the 32-bit WinDriver
installation (<WD32>\lib\x86\wdapi<ver>.lib on
Windows / <WD32>/lib/libwdapi<ver>.so on Linux); and
it should be distributed with the standard 32-bit WinDriver API
DLL/shared object (<WD32>\redist\wdapi<ver>.dll on
Windows / <WD32>/lib/libwdapi<ver>.so on Linux) and
any other required 32-bit distribution file, as outlined in the
WinDriver distribution instructions in the manuals.
Developing a 32-bit Application for Both 32-bit and 64-bit Platforms
If you have both 64-bit and 32-bit WinDriver installations, you can also create
a single 32-bit application that can be executed on both 32-bit and 64-bit
platforms. This can be done using the following method:
- Create a DLL (on Windows) or a shared object (on Linux) that
concentrates the calls to the WinDriver APIs.
If you created a WinDriver application using the generated DriverWizard
code or one of the WinDriver samples, convert this application to a
DLL/shared object.
- Compile two versions of your DLL/shared object:
- A version for 32-bit platforms: This version
should be compiled using a 32-bit compiler, without the
KERNEL_64BIT definition,
and using the standard 32-bit WinDriver API library/shared
object from the 32-bit WinDriver installation —
<WD32>\lib\x86\wdapi<ver>.lib on Windows
(e.g., C:\WinDriver\lib\x86\wdapi10.2.1.lib)
/ <WD32>/lib/libwdapi<ver>.so on Linux (e.g.,
/c/WinDriver/lib/libwdapi10.2.1.so).
- A version for 64-bit platforms: This version
should be compiled with a 64-bit compiler, using the standard
64-bit WinDriver API library/shared object from the 64-bit
WinDriver installation —
<WD64>\lib\amd64\wdapi<ver>.lib on Windows
(e.g., C:\WinDriver64\lib\x86\wdapi10.2.1.lib)
/ <WD64>/lib/libwdapi<ver>.so on Linux
(e.g.,
/c/WinDriver64/lib/libwdapi10.2.1.so).
- Write a 32-bit application that communicates with WinDriver via the
DLL/shared object that you created; the application should be
implemented to load the relevant version of the DLL/shared object
— 32-bit or 64-bit — depending on the platform on which it
is run.
Note: This application should be compiled using an appropriate 32-bit
compiler, without the
KERNEL_64BIT definition.
NOTE
When distributing a driver that was developed using this method, be sure to
distribute the relevant files for each target platform:
- For 32-bit platforms, distribute the application together with the
32-bit version of your WinDriver-wrapper DLL/shared object, and with
the standard 32-bit files from the 32-bit WinDriver installation,
including the 32-bit WinDriver DLL/shared object
(<WD32>\redist\wdapi<ver>.dll on Windows /
<WD32>/lib/libwdapi<ver>.so on Linux).
- For 64-bit platforms, distribute the application together with the
64-bit version of your WinDriver-wrapper DLL/shared object, and with
the standard 64-bit files from the 64-bit WinDriver installation,
including the 64-bit WinDriver DLL/shared object
(<WD64>\redist\wdapi<ver>.dll on Windows /
<WD64>/lib/libwdapi<ver>.so on Linux).
For detailed distribution instructions, refer to the WinDriver User's Manual.
Back to Top
|