Did exactly what you are asking using the Github project: Microsoft/Windows-driver-samples/print/XPSDrvSmpl
https://github.com/Microsoft/Windows-driver-samples/tree/master/print/XPSDrvSmpl
Installer: http://wixtoolset.org/
Application: Listen to internal port
Flow: Install printer and application from a single installer. User prints something with your driver while the application listens to the internal port. When data is sent the application picks it up. This is for XPS, can be converted to PDF, but the flow is similar no matter what you are printing. If you need anything else check out Microsoft/Windows-driver-samples/print/ on GitHub or other sources specific to your needs.
Update:
A lot of questions about how to get the driver working so here is a quick example:
Start by downloading Windows Driver Kit (WDK) if you do not have it installed already. When installing choose to add the extension for Visual Studio as well in the final step. In your Visual Studio 2017 Install you need to have Desktop development with C++
to have the right SDKs. If you don’t have it see the anser below on how to add it.
How do I add features to Visual Studio 2017?
https://developer.microsoft.com/en-us/windows/hardware/windows-driver-kit
Then download the .zip
file for Windows-driver-samples master:
https://github.com/Microsoft/Windows-driver-samples/archive/master.zip
Navigate to the folder <UnzipFolder>\print\XPSDrvSmpl
and open XPSDrvSmpl.sln
in Visual Studio.
Then follow Microsofts own guide on GitHub. As you can see it is for Visual Studio 2015 but I think it is the same for 2017 (not tested yet):
To build a driver solution using Windows Driver Kit (WDK) 10 and Visual Studio 2015, perform the following steps.
- Open the solution file in Visual Studio 2015.
- Add all non-binary files (usually located in the \install directory
of the sample) to the Package project: a. In the Solution Explorer,
right click Driver Files b. Select Add, then click Existing Item c.
Navigate to the location to which you downloaded the sample, and
select all the files in the install directory, or the equivalent set
of non-binary files such as INFs, INIs, GPD, PPD files, etc. d.
Click Add - Configure these files to be added into the driver package: a. In the
Solution Explorer, right click on the solution and choose Add > New
Project. Choose Driver Install Package under Visual C++/Windows
Driver/Package. b. In the Solution Explorer, right click the Package
project and select Properties. c. In the left pane, click
Configuration Properties > Driver Install > Package Files. d. In the
right pane, use the ellipsis button (…) to browse to the set of
files that needs to be added to the driver package. All the data
files that you added in Step 2-c, except the INF file, should be
added. This configuration is per-architecture, so this configuration
must be repeated for each architecture that will be built. e. Click
OK. - Open the INF file and edit it to match the built output. a. Open the
INF file. b. In the Version section, add a reference to a catalog
file like this: CatalogFile=XpsDrvSmpl.cat. c. In the
SourceDisksFiles section, change the location of the DLL files you
are building, to =1. This indicates that there is no architecture
specific directory in this driver. If you ship multiple
architectures simultaneously, you will need to collate the driver
INF manually.
At this point, Visual Studio 2015 will be able to build a driver package and output the files to disk. In order to configure driver signing and deployment, see Developing, Testing, and Deploying Drivers.
https://github.com/Microsoft/Windows-driver-samples/tree/master/print/XPSDrvSmpl#build-the-sample