added windows version of vpcd driver
based on Fabio Ottavi's UMDF Driver for a Virtual Smart Card Reader, see http://www.codeproject.com/Articles/134010/An-UMDF-Driver-for-a-Virtual-Smart-Card-Reader
This commit is contained in:
134
virtualsmartcard/win32/vpcd/DllMain.cpp
Normal file
134
virtualsmartcard/win32/vpcd/DllMain.cpp
Normal file
@@ -0,0 +1,134 @@
|
|||||||
|
|
||||||
|
#include "internal.h"
|
||||||
|
|
||||||
|
class CVirtualSmartCardDriverModule : public CAtlDllModuleT<CVirtualSmartCardDriverModule> {} _AtlModule;
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// DllMain
|
||||||
|
//
|
||||||
|
// This is the main DLL Entry Point.
|
||||||
|
//
|
||||||
|
// Parameters:
|
||||||
|
// hInstance - Handle to the DLL module
|
||||||
|
// dwReason - Indicates why the DLL entry point is being called
|
||||||
|
// lpReserved - Additional information based on dwReason
|
||||||
|
//
|
||||||
|
// Return Values:
|
||||||
|
// TRUE = initialization succeeds
|
||||||
|
// FALSE = initialization fails
|
||||||
|
//
|
||||||
|
/////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
extern "C" BOOL WINAPI DllMain(HINSTANCE hInstance,
|
||||||
|
DWORD dwReason,
|
||||||
|
LPVOID lpReserved)
|
||||||
|
{
|
||||||
|
(lpReserved);
|
||||||
|
|
||||||
|
switch (dwReason)
|
||||||
|
{
|
||||||
|
case DLL_PROCESS_ATTACH:
|
||||||
|
DisableThreadLibraryCalls(hInstance);
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DLL_PROCESS_DETACH:
|
||||||
|
_AtlModule.Term();
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Call the ATL module class so it can initialize
|
||||||
|
return _AtlModule.DllMain(dwReason, lpReserved);
|
||||||
|
}
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// DllCanUnloadNow
|
||||||
|
//
|
||||||
|
// Used to determine whether the DLL can be unloaded by OLE
|
||||||
|
//
|
||||||
|
// Parameters:
|
||||||
|
// void - (unused argument)
|
||||||
|
//
|
||||||
|
// Return Values:
|
||||||
|
// S_OK: DLL can be unloaded
|
||||||
|
// S_FALSE: DLL cannot be unloaded now
|
||||||
|
//
|
||||||
|
/////////////////////////////////////////////////////////////////////////
|
||||||
|
STDAPI DllCanUnloadNow(void)
|
||||||
|
{
|
||||||
|
return _AtlModule.DllCanUnloadNow();
|
||||||
|
}
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// DllGetClassObject
|
||||||
|
//
|
||||||
|
// Returns a class factory to create an object of the requested type
|
||||||
|
//
|
||||||
|
// Parameters:
|
||||||
|
// rclsid - CLSID that will associate the correct data and code
|
||||||
|
// riid - Reference to the IID the caller will use
|
||||||
|
// ppv - pointer to an interface pointer requested in riid
|
||||||
|
//
|
||||||
|
// Return Values:
|
||||||
|
// S_OK: The object was retrieved successfully.
|
||||||
|
// CLASS_E_CLASSNOTAVAILABLE: The DLL does not support the class
|
||||||
|
//
|
||||||
|
/////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
STDAPI DllGetClassObject(__in REFCLSID rclsid, __in REFIID riid, __deref_out LPVOID* ppv)
|
||||||
|
{
|
||||||
|
return _AtlModule.DllGetClassObject(rclsid, riid, ppv);
|
||||||
|
}
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// DllRegisterServer
|
||||||
|
//
|
||||||
|
// Adds entries to the system registry
|
||||||
|
//
|
||||||
|
// Parameters:
|
||||||
|
// void - (unused argument)
|
||||||
|
//
|
||||||
|
// Return Values:
|
||||||
|
// S_OK: The registry entries were created successfully
|
||||||
|
// SELFREG_E_TYPELIB: The server was unable to complete the
|
||||||
|
// registration of all the type libraries used by its classes
|
||||||
|
// SELFREG_E_CLASS: The server was unable to complete the
|
||||||
|
// registration of all the object classes
|
||||||
|
//
|
||||||
|
/////////////////////////////////////////////////////////////////////////
|
||||||
|
STDAPI DllRegisterServer(void)
|
||||||
|
{
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// DllUnregisterServer
|
||||||
|
//
|
||||||
|
// Removes entries from the system registry
|
||||||
|
//
|
||||||
|
// Parameters:
|
||||||
|
// void - (unused argument)
|
||||||
|
//
|
||||||
|
// Return Values:
|
||||||
|
// S_OK: The registry entries were removed successfully
|
||||||
|
// S_FALSE: Unregistration of known entries was successful, but
|
||||||
|
// other entries still exist for this server's classes
|
||||||
|
// SELFREG_E_TYPELIB: The server was unable to remove the entries
|
||||||
|
// of all the type libraries used by its classes
|
||||||
|
// SELFREG_E_CLASS: The server was unable to to remove the entries
|
||||||
|
// of all the object classes
|
||||||
|
//
|
||||||
|
/////////////////////////////////////////////////////////////////////////
|
||||||
|
STDAPI DllUnregisterServer(void)
|
||||||
|
{
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
126
virtualsmartcard/win32/vpcd/Queue.cpp
Normal file
126
virtualsmartcard/win32/vpcd/Queue.cpp
Normal file
@@ -0,0 +1,126 @@
|
|||||||
|
|
||||||
|
|
||||||
|
#include "internal.h"
|
||||||
|
#include "Device.h"
|
||||||
|
#include "Queue.h"
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// CMyQueue::CMyQueue
|
||||||
|
//
|
||||||
|
// Object constructor function
|
||||||
|
//
|
||||||
|
// Initialize member variables
|
||||||
|
//
|
||||||
|
/////////////////////////////////////////////////////////////////////////
|
||||||
|
CMyQueue::CMyQueue() :
|
||||||
|
m_pParentDevice(NULL)
|
||||||
|
{
|
||||||
|
state=0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// CMyQueue::~CMyQueue
|
||||||
|
//
|
||||||
|
// Object destructor function
|
||||||
|
//
|
||||||
|
//
|
||||||
|
/////////////////////////////////////////////////////////////////////////
|
||||||
|
CMyQueue::~CMyQueue()
|
||||||
|
{
|
||||||
|
// Release the reference that was incremented in CreateInstance()
|
||||||
|
SAFE_RELEASE(m_pParentDevice);
|
||||||
|
}
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// CMyQueue::CreateInstance
|
||||||
|
//
|
||||||
|
// This function supports the COM factory creation system
|
||||||
|
//
|
||||||
|
// Parameters:
|
||||||
|
// parentDevice - A pointer to the CWSSDevice object
|
||||||
|
// ppUkwn - pointer to a pointer to the queue to be returned
|
||||||
|
//
|
||||||
|
// Return Values:
|
||||||
|
// S_OK: The queue was created successfully
|
||||||
|
//
|
||||||
|
/////////////////////////////////////////////////////////////////////////
|
||||||
|
HRESULT CMyQueue::CreateInstance(__in IWDFDevice* pWdfDevice, CMyDevice* pMyDevice)
|
||||||
|
{
|
||||||
|
inFunc;
|
||||||
|
CComObject<CMyQueue>* pMyQueue = NULL;
|
||||||
|
|
||||||
|
if(NULL == pMyDevice)
|
||||||
|
{
|
||||||
|
return E_INVALIDARG;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT hr = CComObject<CMyQueue>::CreateInstance(&pMyQueue);
|
||||||
|
|
||||||
|
if(SUCCEEDED(hr))
|
||||||
|
{
|
||||||
|
// AddRef the object
|
||||||
|
pMyQueue->AddRef();
|
||||||
|
|
||||||
|
// Store the parent device object
|
||||||
|
pMyQueue->m_pParentDevice = pMyDevice;
|
||||||
|
|
||||||
|
// Increment the reference for the lifetime of the CMyQueue object.
|
||||||
|
pMyQueue->m_pParentDevice->AddRef();
|
||||||
|
|
||||||
|
CComPtr<IUnknown> spIUnknown;
|
||||||
|
hr = pMyQueue->QueryInterface(IID_IUnknown, (void**)&spIUnknown);
|
||||||
|
|
||||||
|
if(SUCCEEDED(hr))
|
||||||
|
{
|
||||||
|
// Create the framework queue
|
||||||
|
CComPtr<IWDFIoQueue> spDefaultQueue;
|
||||||
|
hr = pWdfDevice->CreateIoQueue( spIUnknown,
|
||||||
|
TRUE, // DefaultQueue
|
||||||
|
WdfIoQueueDispatchParallel, // Parallel queue handling
|
||||||
|
FALSE, // PowerManaged
|
||||||
|
TRUE, // AllowZeroLengthRequests
|
||||||
|
&spDefaultQueue
|
||||||
|
);
|
||||||
|
if (FAILED(hr))
|
||||||
|
{
|
||||||
|
OutputDebugString (L"IoQueue NOT Created\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
OutputDebugString (L"IoQueue Created\n");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Release the pMyQueue pointer when done. Note: UMDF holds a reference to it above
|
||||||
|
SAFE_RELEASE(pMyQueue);
|
||||||
|
}
|
||||||
|
|
||||||
|
return hr;
|
||||||
|
}
|
||||||
|
/////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// CMyQueue::OnDeviceIoControl
|
||||||
|
//
|
||||||
|
// This method is called when an IOCTL is sent to the device
|
||||||
|
//
|
||||||
|
// Parameters:
|
||||||
|
// pQueue - pointer to an IO queue
|
||||||
|
// pRequest - pointer to an IO request
|
||||||
|
// ControlCode - The IOCTL to process
|
||||||
|
// InputBufferSizeInBytes - the size of the input buffer
|
||||||
|
// OutputBufferSizeInBytes - the size of the output buffer
|
||||||
|
//
|
||||||
|
/////////////////////////////////////////////////////////////////////////
|
||||||
|
STDMETHODIMP_ (void) CMyQueue::OnDeviceIoControl(
|
||||||
|
__in IWDFIoQueue* pQueue,
|
||||||
|
__in IWDFIoRequest* pRequest,
|
||||||
|
__in ULONG ControlCode,
|
||||||
|
SIZE_T InputBufferSizeInBytes,
|
||||||
|
SIZE_T OutputBufferSizeInBytes
|
||||||
|
)
|
||||||
|
{
|
||||||
|
m_pParentDevice->ProcessIoControl(pQueue,pRequest,ControlCode,InputBufferSizeInBytes,OutputBufferSizeInBytes);
|
||||||
|
|
||||||
|
}
|
||||||
37
virtualsmartcard/win32/vpcd/Queue.h
Normal file
37
virtualsmartcard/win32/vpcd/Queue.h
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
class ATL_NO_VTABLE CMyQueue :
|
||||||
|
public CComObjectRootEx<CComMultiThreadModel>,
|
||||||
|
public IQueueCallbackDeviceIoControl
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual ~CMyQueue();
|
||||||
|
|
||||||
|
DECLARE_NOT_AGGREGATABLE(CMyQueue)
|
||||||
|
|
||||||
|
BEGIN_COM_MAP(CMyQueue)
|
||||||
|
COM_INTERFACE_ENTRY(IQueueCallbackDeviceIoControl)
|
||||||
|
END_COM_MAP()
|
||||||
|
|
||||||
|
static HRESULT CreateInstance(__in IWDFDevice* pWdfDevice, CMyDevice* pMyDevice);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
CMyQueue();
|
||||||
|
|
||||||
|
// COM Interface methods
|
||||||
|
public:
|
||||||
|
int state;
|
||||||
|
// IQueueCallbackDeviceIoControl
|
||||||
|
STDMETHOD_ (void, OnDeviceIoControl)(
|
||||||
|
__in IWDFIoQueue* pQueue,
|
||||||
|
__in IWDFIoRequest* pRequest,
|
||||||
|
__in ULONG ControlCode,
|
||||||
|
SIZE_T InputBufferSizeInBytes,
|
||||||
|
SIZE_T OutputBufferSizeInBytes
|
||||||
|
);
|
||||||
|
|
||||||
|
private:
|
||||||
|
CMyDevice* m_pParentDevice; // Parent device object
|
||||||
|
};
|
||||||
|
|
||||||
20
virtualsmartcard/win32/vpcd/VirtualSCReader.idl
Normal file
20
virtualsmartcard/win32/vpcd/VirtualSCReader.idl
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
import "wudfddi.idl";
|
||||||
|
|
||||||
|
[
|
||||||
|
uuid(8B9C88E9-7E63-46c7-832B-D48D0290E4BF),
|
||||||
|
version(1.0),
|
||||||
|
helpstring("VirtualSCReader Driver Type Library")
|
||||||
|
]
|
||||||
|
library VirtualSCReaderDriverLib
|
||||||
|
{
|
||||||
|
importlib("stdole2.tlb");
|
||||||
|
[
|
||||||
|
uuid(d4112073-d09b-458f-a5aa-35ef21eef5de),
|
||||||
|
//uuid(10654262-B9BD-4636-8890-F66362CCC207),
|
||||||
|
helpstring("VirtualSCReader Class")
|
||||||
|
]
|
||||||
|
coclass VirtualSCReaderDriver
|
||||||
|
{
|
||||||
|
[default] interface IDriverEntry;
|
||||||
|
};
|
||||||
|
};
|
||||||
432
virtualsmartcard/win32/vpcd/device.cpp
Normal file
432
virtualsmartcard/win32/vpcd/device.cpp
Normal file
@@ -0,0 +1,432 @@
|
|||||||
|
#include "vpcd.h"
|
||||||
|
#include "internal.h"
|
||||||
|
#include "VirtualSCReader.h"
|
||||||
|
#include "queue.h"
|
||||||
|
#include "device.h"
|
||||||
|
#include "driver.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <winscard.h>
|
||||||
|
#include "memory.h"
|
||||||
|
#include <Sddl.h>
|
||||||
|
|
||||||
|
HRESULT
|
||||||
|
CMyDevice::CreateInstance(
|
||||||
|
__in IWDFDriver *FxDriver,
|
||||||
|
__in IWDFDeviceInitialize * FxDeviceInit
|
||||||
|
)
|
||||||
|
/*++
|
||||||
|
|
||||||
|
Routine Description:
|
||||||
|
|
||||||
|
This method creates and initializs an instance of the virtual smart card reader driver's
|
||||||
|
device callback object.
|
||||||
|
|
||||||
|
Arguments:
|
||||||
|
|
||||||
|
FxDeviceInit - the settings for the device.
|
||||||
|
|
||||||
|
Device - a location to store the referenced pointer to the device object.
|
||||||
|
|
||||||
|
Return Value:
|
||||||
|
|
||||||
|
Status
|
||||||
|
|
||||||
|
--*/
|
||||||
|
{
|
||||||
|
inFunc;
|
||||||
|
CComObject<CMyDevice>* device = NULL;
|
||||||
|
HRESULT hr;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Allocate a new instance of the device class.
|
||||||
|
//
|
||||||
|
hr = CComObject<CMyDevice>::CreateInstance(&device);
|
||||||
|
|
||||||
|
if (device==NULL)
|
||||||
|
{
|
||||||
|
return E_OUTOFMEMORY;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Initialize the instance.
|
||||||
|
//
|
||||||
|
device->AddRef();
|
||||||
|
FxDeviceInit->SetLockingConstraint(WdfDeviceLevel);
|
||||||
|
|
||||||
|
CComPtr<IUnknown> spCallback;
|
||||||
|
hr = device->QueryInterface(IID_IUnknown, (void**)&spCallback);
|
||||||
|
|
||||||
|
CComPtr<IWDFDevice> spIWDFDevice;
|
||||||
|
if (SUCCEEDED(hr))
|
||||||
|
{
|
||||||
|
hr = FxDriver->CreateDevice(FxDeviceInit, spCallback, &spIWDFDevice);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (spIWDFDevice->CreateDeviceInterface(&SmartCardReaderGuid,NULL)!=0)
|
||||||
|
OutputDebugString(L"CreateDeviceInterface Failed\n");
|
||||||
|
|
||||||
|
SAFE_RELEASE(device);
|
||||||
|
|
||||||
|
return hr;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CMyDevice::IoSmartCardIsPresent(IWDFIoRequest* pRequest,SIZE_T inBufSize,SIZE_T outBufSize) {
|
||||||
|
UNREFERENCED_PARAMETER(inBufSize);
|
||||||
|
UNREFERENCED_PARAMETER(outBufSize);
|
||||||
|
inFunc;
|
||||||
|
if (vicc_present(ctx) == 1)
|
||||||
|
// there's a smart card present, so complete the request
|
||||||
|
pRequest->CompleteWithInformation(STATUS_SUCCESS, 0);
|
||||||
|
else {
|
||||||
|
// there's no smart card present, so leave the request pending; it will be completed later
|
||||||
|
waitInsertIpr=pRequest;
|
||||||
|
IRequestCallbackCancel *callback;
|
||||||
|
QueryInterface(__uuidof(IRequestCallbackCancel),(void**)&callback);
|
||||||
|
pRequest->MarkCancelable(callback);
|
||||||
|
callback->Release();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CMyDevice::IoSmartCardGetState(IWDFIoRequest* pRequest,SIZE_T inBufSize,SIZE_T outBufSize) {
|
||||||
|
UNREFERENCED_PARAMETER(inBufSize);
|
||||||
|
UNREFERENCED_PARAMETER(outBufSize);
|
||||||
|
inFunc;
|
||||||
|
if (vicc_present(ctx) == 1) {
|
||||||
|
OutputDebugString(L"[GSTA]SCARD_SPECIFIC\n");
|
||||||
|
completeWithInteger(pRequest, SCARD_SPECIFIC);
|
||||||
|
} else {
|
||||||
|
OutputDebugString(L"SCARD_ABSENT\n");
|
||||||
|
completeWithInteger(pRequest, SCARD_ABSENT);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void CMyDevice::IoSmartCardIsAbsent(IWDFIoRequest* pRequest,SIZE_T inBufSize,SIZE_T outBufSize) {
|
||||||
|
UNREFERENCED_PARAMETER(inBufSize);
|
||||||
|
UNREFERENCED_PARAMETER(outBufSize);
|
||||||
|
inFunc;
|
||||||
|
if (vicc_present(ctx) == 0)
|
||||||
|
// there's no smart card present, so complete the request
|
||||||
|
pRequest->CompleteWithInformation(STATUS_SUCCESS, 0);
|
||||||
|
else {
|
||||||
|
// there's a smart card present, so leave the request pending; it will be completed later
|
||||||
|
waitRemoveIpr=pRequest;
|
||||||
|
IRequestCallbackCancel *callback;
|
||||||
|
|
||||||
|
QueryInterface(__uuidof(IRequestCallbackCancel),(void**)&callback);
|
||||||
|
pRequest->MarkCancelable(callback);
|
||||||
|
callback->Release();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CMyDevice::IoSmartCardPower(IWDFIoRequest* pRequest,SIZE_T inBufSize,SIZE_T outBufSize) {
|
||||||
|
UNREFERENCED_PARAMETER(inBufSize);
|
||||||
|
UNREFERENCED_PARAMETER(outBufSize);
|
||||||
|
inFunc;
|
||||||
|
DWORD code;
|
||||||
|
if (!getInteger(pRequest, &code)) {
|
||||||
|
OutputDebugString(L"error getting code\n");
|
||||||
|
pRequest->CompleteWithInformation(STATUS_NO_MEDIA, 0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
switch (code) {
|
||||||
|
case SCARD_COLD_RESET:
|
||||||
|
OutputDebugString(L"[POWR]SCARD_COLD_RESET\n");
|
||||||
|
vicc_poweroff(ctx);
|
||||||
|
vicc_poweron(ctx);
|
||||||
|
break;
|
||||||
|
case SCARD_WARM_RESET:
|
||||||
|
OutputDebugString(L"[POWR]SCARD_WARM_RESET\n");
|
||||||
|
vicc_reset(ctx);
|
||||||
|
break;
|
||||||
|
case SCARD_POWER_DOWN:
|
||||||
|
OutputDebugString(L"[POWR]SCARD_POWER_DOWN\n");
|
||||||
|
vicc_poweroff(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (code==SCARD_COLD_RESET || code==SCARD_WARM_RESET) {
|
||||||
|
int ATRsize = vicc_getatr(ctx, &outdata);
|
||||||
|
if (ATRsize <= 0) {
|
||||||
|
pRequest->CompleteWithInformation(STATUS_NO_MEDIA, 0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
outlength = ATRsize;
|
||||||
|
completeWithBuffer(pRequest,outdata,outlength);
|
||||||
|
} else {
|
||||||
|
pRequest->CompleteWithInformation(STATUS_SUCCESS, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CMyDevice::IoSmartCardSetAttribute(IWDFIoRequest* pRequest,SIZE_T inBufSize,SIZE_T outBufSize) {
|
||||||
|
UNREFERENCED_PARAMETER(inBufSize);
|
||||||
|
UNREFERENCED_PARAMETER(outBufSize);
|
||||||
|
inFunc;
|
||||||
|
|
||||||
|
IWDFMemory *inmem=NULL;
|
||||||
|
pRequest->GetInputMemory(&inmem);
|
||||||
|
|
||||||
|
SIZE_T size;
|
||||||
|
BYTE *data=(BYTE *)inmem->GetDataBuffer(&size);
|
||||||
|
|
||||||
|
DWORD minCode=*(DWORD*)(data);
|
||||||
|
bool handled=false;
|
||||||
|
if (minCode==SCARD_ATTR_DEVICE_IN_USE) {
|
||||||
|
OutputDebugString(L"[SATT]SCARD_ATTR_DEVICE_IN_USE\n");
|
||||||
|
pRequest->CompleteWithInformation(STATUS_SUCCESS, 0);
|
||||||
|
handled=true;
|
||||||
|
}
|
||||||
|
inmem->Release();
|
||||||
|
|
||||||
|
if (!handled) {
|
||||||
|
OutputDebugString(L"[SATT]ERROR_NOT_SUPPORTED\n");
|
||||||
|
pRequest->CompleteWithInformation(HRESULT_FROM_WIN32(ERROR_NOT_SUPPORTED), 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CMyDevice::IoSmartCardTransmit(IWDFIoRequest* pRequest,SIZE_T inBufSize,SIZE_T outBufSize) {
|
||||||
|
UNREFERENCED_PARAMETER(inBufSize);
|
||||||
|
UNREFERENCED_PARAMETER(outBufSize);
|
||||||
|
inFunc;
|
||||||
|
if (!getBuffer(pRequest,&indata,&inlength)) {
|
||||||
|
pRequest->CompleteWithInformation(STATUS_INVALID_DEVICE_STATE, 0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (((SCARD_IO_REQUEST*)indata)->dwProtocol!=SCARD_PROTOCOL_T1) {
|
||||||
|
pRequest->CompleteWithInformation(STATUS_INVALID_DEVICE_STATE, 0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
int RespSize = vicc_transmit(ctx, inlength - sizeof(SCARD_IO_REQUEST), indata + sizeof(SCARD_IO_REQUEST), &outdata);
|
||||||
|
if (RespSize < 0)
|
||||||
|
{
|
||||||
|
pRequest->CompleteWithInformation(STATUS_NO_MEDIA, 0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
outlength = RespSize;
|
||||||
|
BYTE *Resp = (BYTE *) malloc(outlength+sizeof(SCARD_IO_REQUEST));
|
||||||
|
if (!Resp) {
|
||||||
|
pRequest->CompleteWithInformation(STATUS_NO_MEDIA, 0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
((SCARD_IO_REQUEST*)Resp)->cbPciLength=sizeof(SCARD_IO_REQUEST);
|
||||||
|
((SCARD_IO_REQUEST*)Resp)->dwProtocol=SCARD_PROTOCOL_T1;
|
||||||
|
memcpy(Resp + sizeof(SCARD_IO_REQUEST), outdata, outlength);
|
||||||
|
completeWithBuffer(pRequest,Resp,RespSize+sizeof(SCARD_IO_REQUEST));
|
||||||
|
}
|
||||||
|
|
||||||
|
void CMyDevice::IoSmartCardGetAttribute(IWDFIoRequest* pRequest,SIZE_T inBufSize,SIZE_T outBufSize) {
|
||||||
|
UNREFERENCED_PARAMETER(inBufSize);
|
||||||
|
DWORD code;
|
||||||
|
int ATRsize;
|
||||||
|
|
||||||
|
if (!getInteger(pRequest, &code)) {
|
||||||
|
OutputDebugString(L"error getting code\n");
|
||||||
|
pRequest->CompleteWithInformation(STATUS_NO_MEDIA, 0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch(code) {
|
||||||
|
case SCARD_ATTR_CHARACTERISTICS:
|
||||||
|
// 0x00000000 No special characteristics
|
||||||
|
OutputDebugString(L"[GATT]SCARD_ATTR_CHARACTERISTICS\n");
|
||||||
|
completeWithInteger(pRequest,0);
|
||||||
|
return;
|
||||||
|
case SCARD_ATTR_VENDOR_NAME:
|
||||||
|
OutputDebugString(L"[GATT]SCARD_ATTR_VENDOR_NAME\n");
|
||||||
|
completeWithString(pRequest,"Virtual Smart Card Architecture",(int)outBufSize);
|
||||||
|
return;
|
||||||
|
case SCARD_ATTR_VENDOR_IFD_TYPE:
|
||||||
|
OutputDebugString(L"[GATT]SCARD_ATTR_VENDOR_IFD_TYPE\n");
|
||||||
|
completeWithString(pRequest,"Virtual PCD",(int)outBufSize);
|
||||||
|
return;
|
||||||
|
case SCARD_ATTR_DEVICE_UNIT:
|
||||||
|
OutputDebugString(L"[GATT]SCARD_ATTR_DEVICE_UNIT\n");
|
||||||
|
completeWithInteger(pRequest,0);
|
||||||
|
return;
|
||||||
|
case SCARD_ATTR_ATR_STRING:
|
||||||
|
OutputDebugString(L"[GATT]SCARD_ATTR_ATR_STRING\n");
|
||||||
|
ATRsize = vicc_getatr(ctx, &outdata);
|
||||||
|
if (ATRsize <= 0)
|
||||||
|
{
|
||||||
|
pRequest->CompleteWithInformation(STATUS_NO_MEDIA, 0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
outlength = ATRsize;
|
||||||
|
completeWithBuffer(pRequest,outdata,outlength);
|
||||||
|
return;
|
||||||
|
case SCARD_ATTR_CURRENT_PROTOCOL_TYPE:
|
||||||
|
OutputDebugString(L"[GATT]SCARD_ATTR_CURRENT_PROTOCOL_TYPE\n");
|
||||||
|
completeWithInteger(pRequest,SCARD_PROTOCOL_T1); // T=1
|
||||||
|
return;
|
||||||
|
default:
|
||||||
|
OutputDebugString(L"[GATT]ERROR_NOT_SUPPORTED\n");
|
||||||
|
pRequest->CompleteWithInformation(HRESULT_FROM_WIN32(ERROR_NOT_SUPPORTED), 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CMyDevice::ProcessIoControl(__in IWDFIoQueue* pQueue,
|
||||||
|
__in IWDFIoRequest* pRequest,
|
||||||
|
__in ULONG ControlCode,
|
||||||
|
SIZE_T inBufSize,
|
||||||
|
SIZE_T outBufSize)
|
||||||
|
{
|
||||||
|
inFunc;
|
||||||
|
UNREFERENCED_PARAMETER(pQueue);
|
||||||
|
|
||||||
|
if (ControlCode==IOCTL_SMARTCARD_GET_ATTRIBUTE) {
|
||||||
|
IoSmartCardGetAttribute(pRequest,inBufSize,outBufSize);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if (ControlCode==IOCTL_SMARTCARD_IS_PRESENT) {
|
||||||
|
IoSmartCardIsPresent(pRequest,inBufSize,outBufSize);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if (ControlCode==IOCTL_SMARTCARD_GET_STATE) {
|
||||||
|
IoSmartCardGetState(pRequest,inBufSize,outBufSize);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if (ControlCode==IOCTL_SMARTCARD_IS_ABSENT) {
|
||||||
|
IoSmartCardIsAbsent(pRequest,inBufSize,outBufSize);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if (ControlCode==IOCTL_SMARTCARD_POWER) {
|
||||||
|
IoSmartCardPower(pRequest,inBufSize,outBufSize);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if (ControlCode==IOCTL_SMARTCARD_SET_ATTRIBUTE) {
|
||||||
|
IoSmartCardSetAttribute(pRequest,inBufSize,outBufSize);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if (ControlCode==IOCTL_SMARTCARD_TRANSMIT) {
|
||||||
|
IoSmartCardTransmit(pRequest,inBufSize,outBufSize);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
OutputDebugString(L"[IOCT]ERROR_NOT_SUPPORTED\n");
|
||||||
|
pRequest->CompleteWithInformation(HRESULT_FROM_WIN32(ERROR_NOT_SUPPORTED), 0);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// CMyDevice::OnPrepareHardware
|
||||||
|
//
|
||||||
|
// Called by UMDF to prepare the hardware for use.
|
||||||
|
//
|
||||||
|
// Parameters:
|
||||||
|
// pWdfDevice - pointer to an IWDFDevice object representing the
|
||||||
|
// device
|
||||||
|
//
|
||||||
|
// Return Values:
|
||||||
|
// S_OK: success
|
||||||
|
//
|
||||||
|
/////////////////////////////////////////////////////////////////////////
|
||||||
|
HRESULT CMyDevice::OnPrepareHardware(
|
||||||
|
__in IWDFDevice* pWdfDevice
|
||||||
|
)
|
||||||
|
{
|
||||||
|
inFunc;
|
||||||
|
// Store the IWDFDevice pointer
|
||||||
|
m_pWdfDevice = pWdfDevice;
|
||||||
|
|
||||||
|
// Configure the default IO Queue
|
||||||
|
HRESULT hr = CMyQueue::CreateInstance(m_pWdfDevice, this);
|
||||||
|
|
||||||
|
ctx = vicc_init(NULL, VPCDPORT);
|
||||||
|
|
||||||
|
return hr;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// CMyDevice::OnReleaseHardware
|
||||||
|
//
|
||||||
|
// Called by WUDF to uninitialize the hardware.
|
||||||
|
//
|
||||||
|
// Parameters:
|
||||||
|
// pWdfDevice - pointer to an IWDFDevice object for the device
|
||||||
|
//
|
||||||
|
// Return Values:
|
||||||
|
// S_OK:
|
||||||
|
//
|
||||||
|
/////////////////////////////////////////////////////////////////////////
|
||||||
|
HRESULT CMyDevice::OnReleaseHardware(
|
||||||
|
__in IWDFDevice* pWdfDevice
|
||||||
|
)
|
||||||
|
{
|
||||||
|
inFunc;
|
||||||
|
UNREFERENCED_PARAMETER(pWdfDevice);
|
||||||
|
|
||||||
|
// Release the IWDFDevice handle, if it matches
|
||||||
|
if (pWdfDevice == m_pWdfDevice.p)
|
||||||
|
{
|
||||||
|
vicc_eject(ctx);
|
||||||
|
vicc_exit(ctx);
|
||||||
|
ctx = NULL;
|
||||||
|
m_pWdfDevice.Release();
|
||||||
|
}
|
||||||
|
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
HRESULT CMyDevice::OnD0Entry(IN IWDFDevice* pWdfDevice,IN WDF_POWER_DEVICE_STATE previousState) {
|
||||||
|
UNREFERENCED_PARAMETER(pWdfDevice);
|
||||||
|
UNREFERENCED_PARAMETER(previousState);
|
||||||
|
inFunc;
|
||||||
|
vicc_poweroff(ctx);
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
HRESULT CMyDevice::OnD0Exit(IN IWDFDevice* pWdfDevice,IN WDF_POWER_DEVICE_STATE newState) {
|
||||||
|
UNREFERENCED_PARAMETER(pWdfDevice);
|
||||||
|
UNREFERENCED_PARAMETER(newState);
|
||||||
|
inFunc;
|
||||||
|
vicc_poweron(ctx);
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CMyDevice::shutDown(){
|
||||||
|
if (waitRemoveIpr!=NULL) {
|
||||||
|
if (waitRemoveIpr->UnmarkCancelable()==S_OK)
|
||||||
|
waitRemoveIpr->Complete(HRESULT_FROM_WIN32(ERROR_CANCELLED));
|
||||||
|
waitRemoveIpr=NULL;
|
||||||
|
}
|
||||||
|
if (waitInsertIpr!=NULL) {
|
||||||
|
if (waitInsertIpr->UnmarkCancelable()==S_OK)
|
||||||
|
waitInsertIpr->Complete(HRESULT_FROM_WIN32(ERROR_CANCELLED));
|
||||||
|
waitInsertIpr=NULL;
|
||||||
|
}
|
||||||
|
free(outdata);
|
||||||
|
outdata = NULL;
|
||||||
|
outlength = 0;
|
||||||
|
free(indata);
|
||||||
|
indata = NULL;
|
||||||
|
inlength = 0;
|
||||||
|
}
|
||||||
|
HRESULT CMyDevice::OnQueryRemove(IN IWDFDevice* pWdfDevice) {
|
||||||
|
UNREFERENCED_PARAMETER(pWdfDevice);
|
||||||
|
inFunc;
|
||||||
|
shutDown();
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
HRESULT CMyDevice::OnQueryStop(IN IWDFDevice* pWdfDevice) {
|
||||||
|
UNREFERENCED_PARAMETER(pWdfDevice);
|
||||||
|
inFunc;
|
||||||
|
shutDown();
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
void CMyDevice::OnSurpriseRemoval(IN IWDFDevice* pWdfDevice) {
|
||||||
|
UNREFERENCED_PARAMETER(pWdfDevice);
|
||||||
|
inFunc;
|
||||||
|
shutDown();
|
||||||
|
}
|
||||||
|
|
||||||
|
STDMETHODIMP_ (void) CMyDevice::OnCancel(IN IWDFIoRequest* pWdfRequest) {
|
||||||
|
inFunc;
|
||||||
|
if (pWdfRequest==waitRemoveIpr) {
|
||||||
|
OutputDebugString(L"Cancel Remove\n");
|
||||||
|
waitRemoveIpr=NULL;
|
||||||
|
} else if (pWdfRequest==waitInsertIpr) {
|
||||||
|
OutputDebugString(L"Cancel Insert\n");
|
||||||
|
waitInsertIpr=NULL;
|
||||||
|
}
|
||||||
|
pWdfRequest->CompleteWithInformation(HRESULT_FROM_WIN32(ERROR_CANCELLED), 0);
|
||||||
|
}
|
||||||
112
virtualsmartcard/win32/vpcd/device.h
Normal file
112
virtualsmartcard/win32/vpcd/device.h
Normal file
@@ -0,0 +1,112 @@
|
|||||||
|
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
//
|
||||||
|
// Class for the iotrace driver.
|
||||||
|
//
|
||||||
|
|
||||||
|
class ATL_NO_VTABLE CMyDevice :
|
||||||
|
public CComObjectRootEx<CComMultiThreadModel>,
|
||||||
|
public IPnpCallbackHardware,
|
||||||
|
public IPnpCallback,
|
||||||
|
public IRequestCallbackCancel
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
~CMyDevice() {}
|
||||||
|
|
||||||
|
DECLARE_NOT_AGGREGATABLE(CMyDevice)
|
||||||
|
|
||||||
|
BEGIN_COM_MAP(CMyDevice)
|
||||||
|
COM_INTERFACE_ENTRY(IPnpCallbackHardware)
|
||||||
|
COM_INTERFACE_ENTRY(IPnpCallback)
|
||||||
|
COM_INTERFACE_ENTRY(IRequestCallbackCancel)
|
||||||
|
END_COM_MAP()
|
||||||
|
|
||||||
|
CMyDevice(VOID)
|
||||||
|
{
|
||||||
|
m_pWdfDevice = NULL;
|
||||||
|
waitRemoveIpr=NULL;
|
||||||
|
waitInsertIpr=NULL;
|
||||||
|
ctx = NULL;
|
||||||
|
pipe=NULL;
|
||||||
|
eventpipe=NULL;
|
||||||
|
outdata = NULL;
|
||||||
|
outlength = 0;
|
||||||
|
indata = NULL;
|
||||||
|
inlength = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Private data members.
|
||||||
|
//
|
||||||
|
private:
|
||||||
|
|
||||||
|
CComPtr<IWDFDevice> m_pWdfDevice;
|
||||||
|
CComPtr<IWDFIoRequest> waitRemoveIpr,waitInsertIpr;
|
||||||
|
struct vicc_ctx *ctx;
|
||||||
|
BYTE *outdata;
|
||||||
|
SIZE_T outlength;
|
||||||
|
BYTE *indata;
|
||||||
|
SIZE_T inlength;
|
||||||
|
HANDLE pipe;
|
||||||
|
HANDLE eventpipe;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Private methods.
|
||||||
|
//
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
|
||||||
|
HRESULT ConfigureQueue();
|
||||||
|
|
||||||
|
//
|
||||||
|
// Public methods
|
||||||
|
//
|
||||||
|
public:
|
||||||
|
|
||||||
|
//
|
||||||
|
// The factory method used to create an instance of this driver.
|
||||||
|
//
|
||||||
|
|
||||||
|
static
|
||||||
|
HRESULT CreateInstance(
|
||||||
|
__in IWDFDriver *FxDriver,
|
||||||
|
__in IWDFDeviceInitialize *FxDeviceInit
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// COM methods
|
||||||
|
//
|
||||||
|
public:
|
||||||
|
|
||||||
|
//
|
||||||
|
// IUnknown methods.
|
||||||
|
//
|
||||||
|
|
||||||
|
void ProcessIoControl(__in IWDFIoQueue* pQueue,
|
||||||
|
__in IWDFIoRequest* pRequest,
|
||||||
|
__in ULONG ControlCode,
|
||||||
|
SIZE_T InputBufferSizeInBytes,
|
||||||
|
SIZE_T OutputBufferSizeInBytes);
|
||||||
|
|
||||||
|
STDMETHOD_ (HRESULT, OnPrepareHardware)(__in IWDFDevice* pWdfDevice);
|
||||||
|
STDMETHOD_ (HRESULT, OnReleaseHardware)(__in IWDFDevice* pWdfDevice);
|
||||||
|
STDMETHOD_ (HRESULT, OnD0Entry)(IN IWDFDevice* pWdfDevice,IN WDF_POWER_DEVICE_STATE previousState);
|
||||||
|
STDMETHOD_ (HRESULT, OnD0Exit )(IN IWDFDevice* pWdfDevice,IN WDF_POWER_DEVICE_STATE newState);
|
||||||
|
STDMETHOD_ (HRESULT, OnQueryRemove )(IN IWDFDevice* pWdfDevice);
|
||||||
|
STDMETHOD_ (HRESULT, OnQueryStop)(IN IWDFDevice* pWdfDevice);
|
||||||
|
STDMETHOD_ (void, OnSurpriseRemoval)(IN IWDFDevice* pWdfDevice);
|
||||||
|
STDMETHOD_ (void, OnCancel)(IN IWDFIoRequest* pWdfRequest);
|
||||||
|
|
||||||
|
void IoSmartCardGetAttribute(IWDFIoRequest* pRequest,SIZE_T inBufSize,SIZE_T outBufSize);
|
||||||
|
void IoSmartCardIsPresent(IWDFIoRequest* pRequest,SIZE_T inBufSize,SIZE_T outBufSize);
|
||||||
|
void IoSmartCardGetState(IWDFIoRequest* pRequest,SIZE_T inBufSize,SIZE_T outBufSize);
|
||||||
|
void IoSmartCardIsAbsent(IWDFIoRequest* pRequest,SIZE_T inBufSize,SIZE_T outBufSize);
|
||||||
|
void IoSmartCardPower(IWDFIoRequest* pRequest,SIZE_T inBufSize,SIZE_T outBufSize);
|
||||||
|
void IoSmartCardSetAttribute(IWDFIoRequest* pRequest,SIZE_T inBufSize,SIZE_T outBufSize);
|
||||||
|
void IoSmartCardTransmit(IWDFIoRequest* pRequest,SIZE_T inBufSize,SIZE_T outBufSize);
|
||||||
|
void shutDown();
|
||||||
|
};
|
||||||
|
|
||||||
69
virtualsmartcard/win32/vpcd/driver.cpp
Normal file
69
virtualsmartcard/win32/vpcd/driver.cpp
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
|
||||||
|
#include "internal.h"
|
||||||
|
#include "VirtualSCReader.h"
|
||||||
|
#include "driver.h"
|
||||||
|
#include "device.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
CMyDriver::CMyDriver()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// CMyDriver::OnDeviceAdd
|
||||||
|
//
|
||||||
|
// The framework call this function when device is detected. This driver
|
||||||
|
// creates a device callback object
|
||||||
|
//
|
||||||
|
// Parameters:
|
||||||
|
// pDriver - pointer to an IWDFDriver object
|
||||||
|
// pDeviceInit - pointer to a device initialization object
|
||||||
|
//
|
||||||
|
// Return Values:
|
||||||
|
// S_OK: device initialized successfully
|
||||||
|
//
|
||||||
|
/////////////////////////////////////////////////////////////////////////
|
||||||
|
HRESULT CMyDriver::OnDeviceAdd(
|
||||||
|
__in IWDFDriver* pDriver,
|
||||||
|
__in IWDFDeviceInitialize* pDeviceInit
|
||||||
|
)
|
||||||
|
{
|
||||||
|
inFunc;
|
||||||
|
HRESULT hr = CMyDevice::CreateInstance(pDriver, pDeviceInit);
|
||||||
|
|
||||||
|
return hr;
|
||||||
|
}
|
||||||
|
/////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// CMyDriver::OnInitialize
|
||||||
|
//
|
||||||
|
// The framework calls this function just after loading the driver. The driver
|
||||||
|
// can perform any global, device independent intialization in this routine.
|
||||||
|
//
|
||||||
|
/////////////////////////////////////////////////////////////////////////
|
||||||
|
HRESULT CMyDriver::OnInitialize(
|
||||||
|
__in IWDFDriver* pDriver
|
||||||
|
)
|
||||||
|
{
|
||||||
|
UNREFERENCED_PARAMETER(pDriver);
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// CMyDriver::OnDeinitialize
|
||||||
|
//
|
||||||
|
// The framework calls this function just before de-initializing itself. All
|
||||||
|
// WDF framework resources should be released by driver before returning
|
||||||
|
// from this call.
|
||||||
|
//
|
||||||
|
/////////////////////////////////////////////////////////////////////////
|
||||||
|
void CMyDriver::OnDeinitialize(
|
||||||
|
__in IWDFDriver* pDriver
|
||||||
|
)
|
||||||
|
{
|
||||||
|
UNREFERENCED_PARAMETER(pDriver);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
37
virtualsmartcard/win32/vpcd/driver.h
Normal file
37
virtualsmartcard/win32/vpcd/driver.h
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
//
|
||||||
|
// This class handles driver events for the skeleton sample. In particular
|
||||||
|
// it supports the OnDeviceAdd event, which occurs when the driver is called
|
||||||
|
// to setup per-device handlers for a new device stack.
|
||||||
|
//
|
||||||
|
|
||||||
|
class ATL_NO_VTABLE CMyDriver :
|
||||||
|
public CComObjectRootEx<CComMultiThreadModel>,
|
||||||
|
public CComCoClass<CMyDriver, &CLSID_VirtualSCReaderDriver>,
|
||||||
|
public IDriverEntry
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CMyDriver();
|
||||||
|
|
||||||
|
DECLARE_NO_REGISTRY()
|
||||||
|
DECLARE_CLASSFACTORY()
|
||||||
|
DECLARE_NOT_AGGREGATABLE(CMyDriver)
|
||||||
|
|
||||||
|
BEGIN_COM_MAP(CMyDriver)
|
||||||
|
COM_INTERFACE_ENTRY(IDriverEntry)
|
||||||
|
END_COM_MAP()
|
||||||
|
|
||||||
|
public:
|
||||||
|
//
|
||||||
|
// IDriverEntry
|
||||||
|
//
|
||||||
|
STDMETHOD (OnInitialize)(__in IWDFDriver* pDriver);
|
||||||
|
STDMETHOD (OnDeviceAdd)(__in IWDFDriver* pDriver, __in IWDFDeviceInitialize* pDeviceInit);
|
||||||
|
STDMETHOD_ (void, OnDeinitialize)(__in IWDFDriver* pDriver);
|
||||||
|
};
|
||||||
|
|
||||||
|
OBJECT_ENTRY_AUTO(__uuidof(VirtualSCReaderDriver), CMyDriver)
|
||||||
|
|
||||||
15
virtualsmartcard/win32/vpcd/exports.def
Normal file
15
virtualsmartcard/win32/vpcd/exports.def
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
; Skeleton.def : Declares the module parameters.
|
||||||
|
|
||||||
|
;
|
||||||
|
; TODO: Change the library name here to match your binary name.
|
||||||
|
;
|
||||||
|
|
||||||
|
LIBRARY "UMDFSkeleton.DLL"
|
||||||
|
|
||||||
|
EXPORTS
|
||||||
|
DllCanUnloadNow PRIVATE
|
||||||
|
DllGetClassObject PRIVATE
|
||||||
|
DllRegisterServer PRIVATE
|
||||||
|
DllUnregisterServer PRIVATE
|
||||||
|
|
||||||
|
|
||||||
74
virtualsmartcard/win32/vpcd/internal.h
Normal file
74
virtualsmartcard/win32/vpcd/internal.h
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <windows.h>
|
||||||
|
#include <atlbase.h>
|
||||||
|
#include <atlcom.h>
|
||||||
|
#include <atlstr.h>
|
||||||
|
|
||||||
|
__user_driver; // Macro letting the compiler know this is not a kernel driver (this will help surpress needless warnings)
|
||||||
|
|
||||||
|
// Common WPD and WUDF headers
|
||||||
|
|
||||||
|
#ifndef ARRAY_SIZE
|
||||||
|
#define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef SAFE_RELEASE
|
||||||
|
#define SAFE_RELEASE(p) {if ((p)) { (p)->Release(); (p) = NULL; }}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define STATUS_SUCCESS ((NTSTATUS)0x00000000L) // ntsubauth
|
||||||
|
#define STATUS_NO_MEDIA ((NTSTATUS)0xC0000178L)
|
||||||
|
#define STATUS_INVALID_DEVICE_STATE ((NTSTATUS)0xC0000184L)
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// Include the WUDF DDI
|
||||||
|
//
|
||||||
|
#include <devioctl.h>
|
||||||
|
#include <initguid.h>
|
||||||
|
#include <propkeydef.h>
|
||||||
|
#include <propvarutil.h>
|
||||||
|
#include "PortableDeviceTypes.h"
|
||||||
|
#include "PortableDeviceClassExtension.h"
|
||||||
|
#include "PortableDevice.h"
|
||||||
|
|
||||||
|
#include "wudfddi.h"
|
||||||
|
|
||||||
|
//
|
||||||
|
// Use specstrings for in/out annotation of function parameters.
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "specstrings.h"
|
||||||
|
|
||||||
|
//
|
||||||
|
// Forward definitions of classes in the other header files.
|
||||||
|
//
|
||||||
|
|
||||||
|
typedef class CMyDriver *PCMyDriver;
|
||||||
|
typedef class CMyDevice *PCMyDevice;
|
||||||
|
|
||||||
|
//
|
||||||
|
DEFINE_GUID(SmartCardReaderGuid, 0x50DD5230, 0xBA8A, 0x11D1, 0xBF,0x5D,0x00,0x00,0xF8,0x05,0xF5,0x30);
|
||||||
|
//
|
||||||
|
// Include the type specific headers.
|
||||||
|
//
|
||||||
|
|
||||||
|
class funcTrace {
|
||||||
|
public:
|
||||||
|
wchar_t funcN[500];
|
||||||
|
funcTrace (char *func) {
|
||||||
|
wchar_t funcName[500];
|
||||||
|
wsprintf(funcN,L"%S",func);
|
||||||
|
wsprintf(funcName,L"IN -> %s\n",funcN);
|
||||||
|
OutputDebugString(funcName);
|
||||||
|
}
|
||||||
|
~funcTrace () {
|
||||||
|
wchar_t funcName[500];
|
||||||
|
wsprintf(funcName,L"OUT -> %s\n",funcN);
|
||||||
|
OutputDebugString(funcName);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
#define inFunc funcTrace _ftrace(__FUNCTION__);
|
||||||
8
virtualsmartcard/win32/vpcd/makefile.inc
Normal file
8
virtualsmartcard/win32/vpcd/makefile.inc
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
.SUFFIXES: .inx
|
||||||
|
|
||||||
|
STAMP=stampinf
|
||||||
|
|
||||||
|
.inx{$(OBJ_PATH)\$(O)}.inf:
|
||||||
|
copy $(@B).inx $@
|
||||||
|
$(STAMP) -f $@ -a $(_BUILDARCH) -k $(KMDF_VERSION_MAJOR).$(KMDF_VERSION_MINOR) -u $(UMDF_VERSION_MAJOR).$(UMDF_VERSION_MINOR).0
|
||||||
|
|
||||||
37
virtualsmartcard/win32/vpcd/makefile.inc.props
Normal file
37
virtualsmartcard/win32/vpcd/makefile.inc.props
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<PropertyGroup>
|
||||||
|
<STAMP Condition="'$(OVERRIDE_STAMP)'!='true'">stampinf</STAMP>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<NmakeTarget Include="vpcd.inx">
|
||||||
|
<TargetKillSwitch>ConvertedTarget0_Disabled</TargetKillSwitch>
|
||||||
|
<TargetName>Converted Target 0</TargetName>
|
||||||
|
<Outputs>$(OBJ_PATH)\$(O)\vpcd.inf</Outputs>
|
||||||
|
<Condition>
|
||||||
|
</Condition>
|
||||||
|
<Cmd0>copy %24%28%40B%29.inx %24%40</Cmd0>
|
||||||
|
<Cmd1>$(STAMP) -f %24%40 -a $(_BUILDARCH) -k $(KMDF_VERSION_MAJOR).$(KMDF_VERSION_MINOR) -u $(UMDF_VERSION_MAJOR).$(UMDF_VERSION_MINOR).0</Cmd1>
|
||||||
|
</NmakeTarget>
|
||||||
|
</ItemGroup>
|
||||||
|
<Target Name="Converted Target 0" BeforeTargets="$(BuildLinkTargets)" AfterTargets="$(AfterBuildCompileTargets)" Condition="'$(ConvertedTarget0_Disabled)'!='true'">
|
||||||
|
<ItemGroup>
|
||||||
|
<AllEvaluatedTargetInputs Remove="@(AllEvaluatedTargetInputs)" />
|
||||||
|
<t_TargetInput_0 Remove="@(t_TargetInput_0)" />
|
||||||
|
<t_TargetInput_0 Include="vpcd.inx" Condition="Exists('vpcd.inx') And ('@(t_TargetInput_0)'=='')" />
|
||||||
|
<t_TargetInput_0 Include="vpcd.inx" Condition="'@(t_TargetInput_0)'==''" />
|
||||||
|
<AllEvaluatedTargetInputs Include="@(t_TargetInput_0);" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ReplaceNmakeCommandTokens Command="copy %24%28%40B%29.inx %24%40" TaskInputFiles="@(AllEvaluatedTargetInputs)" TaskOutputFile="$(OBJ_PATH)\$(O)\vpcd.inf">
|
||||||
|
<Output TaskParameter="ShouldExecute" PropertyName="TargetOutDated" />
|
||||||
|
<Output TaskParameter="ProcessedCommand" PropertyName="ResolvedCommand_1" />
|
||||||
|
</ReplaceNmakeCommandTokens>
|
||||||
|
<Exec Condition="'$(TargetOutDated)'=='true'" Command="$(ResolvedCommand_1)" WorkingDirectory="$(MSBuildProjectDirectory)" />
|
||||||
|
<ReplaceNmakeCommandTokens Command="$(STAMP) -f %24%40 -a $(_BUILDARCH) -k $(KMDF_VERSION_MAJOR).$(KMDF_VERSION_MINOR) -u $(UMDF_VERSION_MAJOR).$(UMDF_VERSION_MINOR).0" TaskInputFiles="@(AllEvaluatedTargetInputs)" TaskOutputFile="$(OBJ_PATH)\$(O)\vpcd.inf">
|
||||||
|
<Output TaskParameter="ShouldExecute" PropertyName="Junk_Property" />
|
||||||
|
<Output TaskParameter="ProcessedCommand" PropertyName="ResolvedCommand_2" />
|
||||||
|
</ReplaceNmakeCommandTokens>
|
||||||
|
<Exec Condition="'$(TargetOutDated)'=='true'" Command="$(ResolvedCommand_2)" WorkingDirectory="$(MSBuildProjectDirectory)" />
|
||||||
|
<Message Condition="'$(TargetOutDated)'!='true'" Text="File $(OBJ_PATH)\$(O)\vpcd.inf is up-to-date" />
|
||||||
|
</Target>
|
||||||
|
</Project>
|
||||||
103
virtualsmartcard/win32/vpcd/memory.cpp
Normal file
103
virtualsmartcard/win32/vpcd/memory.cpp
Normal file
@@ -0,0 +1,103 @@
|
|||||||
|
#include "memory.h"
|
||||||
|
|
||||||
|
bool getBuffer(IWDFIoRequest *pRequest, BYTE **buffer, SIZE_T *bufferLen)
|
||||||
|
{
|
||||||
|
IWDFMemory *inmem=NULL;
|
||||||
|
|
||||||
|
if (!pRequest || !buffer || !bufferLen) {
|
||||||
|
OutputDebugString(L"wrong arguments");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
pRequest->GetInputMemory(&inmem);
|
||||||
|
if (inmem==NULL) {
|
||||||
|
OutputDebugString(L"GetInputMemory failed");
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
SIZE_T size;
|
||||||
|
void *data=inmem->GetDataBuffer(&size);
|
||||||
|
if (*bufferLen < size) {
|
||||||
|
BYTE *p = (BYTE *) realloc(*buffer, size);
|
||||||
|
if (!p) {
|
||||||
|
OutputDebugString(L"realloc failed");
|
||||||
|
inmem->Release();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
*buffer = p;
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy(*buffer, data, size);
|
||||||
|
(*bufferLen) = size;
|
||||||
|
|
||||||
|
inmem->Release();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void completeWithBuffer(IWDFIoRequest* pRequest,BYTE *result,int inSize) {
|
||||||
|
IWDFMemory *outmem=NULL;
|
||||||
|
pRequest->GetOutputMemory (&outmem);
|
||||||
|
if (outmem==NULL) {
|
||||||
|
OutputDebugString(L"GetOutputMemory failed");
|
||||||
|
pRequest->Complete(HRESULT_FROM_WIN32(ERROR_GEN_FAILURE));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
outmem->CopyFromBuffer(0,result,inSize);
|
||||||
|
outmem->Release();
|
||||||
|
pRequest->CompleteWithInformation(0,(SIZE_T)inSize);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void completeWithString(IWDFIoRequest* pRequest,char *result,int outSize) {
|
||||||
|
IWDFMemory *outmem=NULL;
|
||||||
|
pRequest->GetOutputMemory (&outmem);
|
||||||
|
if (outmem==NULL) {
|
||||||
|
OutputDebugString(L"GetOutputMemory failed");
|
||||||
|
pRequest->Complete(HRESULT_FROM_WIN32(ERROR_GEN_FAILURE));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
int size=min(outSize,(int)strlen(result)+1);
|
||||||
|
outmem->CopyFromBuffer(0,result,size);
|
||||||
|
outmem->Release();
|
||||||
|
pRequest->CompleteWithInformation(0,(SIZE_T)size);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void completeWithInteger(IWDFIoRequest* pRequest,DWORD result) {
|
||||||
|
IWDFMemory *outmem=NULL;
|
||||||
|
pRequest->GetOutputMemory (&outmem);
|
||||||
|
if (outmem==NULL) {
|
||||||
|
OutputDebugString(L"GetOutputMemory failed");
|
||||||
|
pRequest->Complete(HRESULT_FROM_WIN32(ERROR_GEN_FAILURE));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
outmem->CopyFromBuffer(0,&result,sizeof(result));
|
||||||
|
outmem->Release();
|
||||||
|
pRequest->CompleteWithInformation(0,sizeof(result));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool getInteger(IWDFIoRequest *pRequest, DWORD *integer)
|
||||||
|
{
|
||||||
|
IWDFMemory *inmem=NULL;
|
||||||
|
|
||||||
|
if (!pRequest || !integer) {
|
||||||
|
OutputDebugString(L"wrong arguments");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
pRequest->GetInputMemory(&inmem);
|
||||||
|
if (inmem==NULL) {
|
||||||
|
OutputDebugString(L"GetInputMemory failed");
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
SIZE_T size;
|
||||||
|
void *data=inmem->GetDataBuffer(&size);
|
||||||
|
if (size != sizeof(*integer)) {
|
||||||
|
OutputDebugString(L"not enough memory failed");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
*integer=*(DWORD *)data;
|
||||||
|
inmem->Release();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
9
virtualsmartcard/win32/vpcd/memory.h
Normal file
9
virtualsmartcard/win32/vpcd/memory.h
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "internal.h"
|
||||||
|
|
||||||
|
|
||||||
|
bool getBuffer(IWDFIoRequest *pRequest, BYTE **buffer, SIZE_T *bufferLen);
|
||||||
|
void completeWithString(IWDFIoRequest* pRequest,char *result,int outSize);
|
||||||
|
void completeWithBuffer(IWDFIoRequest* pRequest,BYTE *result,int inSize);
|
||||||
|
void completeWithInteger(IWDFIoRequest* pRequest,DWORD result);
|
||||||
|
bool getInteger(IWDFIoRequest *pRequest, DWORD *integer);
|
||||||
1496
virtualsmartcard/win32/vpcd/resource.h
Normal file
1496
virtualsmartcard/win32/vpcd/resource.h
Normal file
File diff suppressed because it is too large
Load Diff
71
virtualsmartcard/win32/vpcd/sources
Normal file
71
virtualsmartcard/win32/vpcd/sources
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
#
|
||||||
|
# UMDF_VERSION_MAJOR controls the headers that the driver uses.
|
||||||
|
# UMDF_VERSION_MAJOR + UMDF_VERSION_MINOR control which version
|
||||||
|
# of UMDF the driver is bound to in the INF and which
|
||||||
|
# update coinstaller it requires (through stampinf).
|
||||||
|
#
|
||||||
|
|
||||||
|
UMDF_VERSION_MAJOR=1
|
||||||
|
UMDF_VERSION_MINOR=9
|
||||||
|
|
||||||
|
KMDF_VERSION_MAJOR=1
|
||||||
|
KMDF_VERSION_MINOR=9
|
||||||
|
|
||||||
|
|
||||||
|
TARGETNAME=vpcd
|
||||||
|
TARGETTYPE=DYNLINK
|
||||||
|
|
||||||
|
USE_ATL = 1
|
||||||
|
ATL_VER = 71
|
||||||
|
USE_MSVCRT = 1
|
||||||
|
|
||||||
|
C_DEFINES = $(C_DEFINES) /D_UNICODE /DUNICODE
|
||||||
|
|
||||||
|
WIN32_WINNT_VERSION=$(LATEST_WIN32_WINNT_VERSION)
|
||||||
|
_NT_TARGET_VERSION=$(_NT_TARGET_VERSION_WIN7)
|
||||||
|
NTDDI_VERSION=$(LATEST_NTDDI_VERSION)
|
||||||
|
|
||||||
|
DLLENTRY=_DllMainCRTStartup
|
||||||
|
DLLDEF=exports.def
|
||||||
|
|
||||||
|
SOURCES=\
|
||||||
|
vpcd.rc \
|
||||||
|
driver.cpp \
|
||||||
|
device.cpp \
|
||||||
|
queue.cpp \
|
||||||
|
memory.cpp \
|
||||||
|
DllMain.cpp \
|
||||||
|
VirtualSCReader.idl
|
||||||
|
|
||||||
|
INCLUDES= $(INCLUDES); \
|
||||||
|
$(SDK_INC_PATH); \
|
||||||
|
$(DDK_INC_PATH); \
|
||||||
|
$(UMDF_INC_PATH)\10;
|
||||||
|
|
||||||
|
MSC_WARNING_LEVEL=/W4 /WX
|
||||||
|
|
||||||
|
TARGETLIBS=\
|
||||||
|
$(SDK_LIB_PATH)\strsafe.lib \
|
||||||
|
$(SDK_LIB_PATH)\kernel32.lib \
|
||||||
|
$(SDK_LIB_PATH)\ole32.lib \
|
||||||
|
$(SDK_LIB_PATH)\oleaut32.lib \
|
||||||
|
$(SDK_LIB_PATH)\uuid.lib \
|
||||||
|
$(SDK_LIB_PATH)\user32.lib \
|
||||||
|
$(SDK_LIB_PATH)\advapi32.lib \
|
||||||
|
$(SDK_LIB_PATH)\shlwapi.lib \
|
||||||
|
$(SDK_LIB_PATH)\ws2_32.lib
|
||||||
|
|
||||||
|
NTTARGETFILE1=$(OBJ_PATH)\$(O)\vpcd.inf
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# This sets up the WPP preprocessor and tells it to scan internal.h to find
|
||||||
|
# the trace function definition that's in there.
|
||||||
|
#
|
||||||
|
|
||||||
|
#RUN_WPP= $(SOURCES) -dll -scan:internal.h
|
||||||
|
|
||||||
|
|
||||||
|
TARGET_DESTINATION=wudf
|
||||||
|
|
||||||
|
|
||||||
33
virtualsmartcard/win32/vpcd/sources.props
Normal file
33
virtualsmartcard/win32/vpcd/sources.props
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<PropertyGroup>
|
||||||
|
<UMDF_VERSION_MAJOR Condition="'$(OVERRIDE_UMDF_VERSION_MAJOR)'!='true'">1</UMDF_VERSION_MAJOR>
|
||||||
|
<UMDF_VERSION_MINOR Condition="'$(OVERRIDE_UMDF_VERSION_MINOR)'!='true'">9</UMDF_VERSION_MINOR>
|
||||||
|
<KMDF_VERSION_MAJOR Condition="'$(OVERRIDE_KMDF_VERSION_MAJOR)'!='true'">1</KMDF_VERSION_MAJOR>
|
||||||
|
<KMDF_VERSION_MINOR Condition="'$(OVERRIDE_KMDF_VERSION_MINOR)'!='true'">9</KMDF_VERSION_MINOR>
|
||||||
|
<TARGETNAME Condition="'$(OVERRIDE_TARGETNAME)'!='true'">vpcd</TARGETNAME>
|
||||||
|
<TARGETTYPE Condition="'$(OVERRIDE_TARGETTYPE)'!='true'">DYNLINK</TARGETTYPE>
|
||||||
|
<USE_ATL Condition="'$(OVERRIDE_USE_ATL)'!='true'">1</USE_ATL>
|
||||||
|
<ATL_VER Condition="'$(OVERRIDE_ATL_VER)'!='true'">71</ATL_VER>
|
||||||
|
<USE_MSVCRT Condition="'$(OVERRIDE_USE_MSVCRT)'!='true'">1</USE_MSVCRT>
|
||||||
|
<C_DEFINES Condition="'$(OVERRIDE_C_DEFINES)'!='true'">$(C_DEFINES) /D_UNICODE /DUNICODE</C_DEFINES>
|
||||||
|
<WIN32_WINNT_VERSION Condition="'$(OVERRIDE_WIN32_WINNT_VERSION)'!='true'">$(LATEST_WIN32_WINNT_VERSION)</WIN32_WINNT_VERSION>
|
||||||
|
<_NT_TARGET_VERSION Condition="'$(OVERRIDE__NT_TARGET_VERSION)'!='true'">$(_NT_TARGET_VERSION_WIN7)</_NT_TARGET_VERSION>
|
||||||
|
<NTDDI_VERSION Condition="'$(OVERRIDE_NTDDI_VERSION)'!='true'">$(LATEST_NTDDI_VERSION)</NTDDI_VERSION>
|
||||||
|
<DLLENTRY Condition="'$(OVERRIDE_DLLENTRY)'!='true'">_DllMainCRTStartup</DLLENTRY>
|
||||||
|
<DLLDEF Condition="'$(OVERRIDE_DLLDEF)'!='true'">exports.def</DLLDEF>
|
||||||
|
<SOURCES Condition="'$(OVERRIDE_SOURCES)'!='true'">vpcd.rc driver.cpp device.cpp queue.cpp memory.cpp DllMain.cpp VirtualSCReader.idl</SOURCES>
|
||||||
|
<INCLUDES Condition="'$(OVERRIDE_INCLUDES)'!='true'">$(INCLUDES); $(SDK_INC_PATH); $(DDK_INC_PATH); $(UMDF_INC_PATH)\10;</INCLUDES>
|
||||||
|
<MSC_WARNING_LEVEL Condition="'$(OVERRIDE_MSC_WARNING_LEVEL)'!='true'">/W4 /WX</MSC_WARNING_LEVEL>
|
||||||
|
<TARGETLIBS Condition="'$(OVERRIDE_TARGETLIBS)'!='true'">$(SDK_LIB_PATH)\strsafe.lib $(SDK_LIB_PATH)\kernel32.lib $(SDK_LIB_PATH)\ole32.lib $(SDK_LIB_PATH)\oleaut32.lib $(SDK_LIB_PATH)\uuid.lib $(SDK_LIB_PATH)\user32.lib $(SDK_LIB_PATH)\advapi32.lib $(SDK_LIB_PATH)\shlwapi.lib $(SDK_LIB_PATH)\ws2_32.lib</TARGETLIBS>
|
||||||
|
<NTTARGETFILE1 Condition="'$(OVERRIDE_NTTARGETFILE1)'!='true'">$(OBJ_PATH)\$(O)\vpcd.inf</NTTARGETFILE1>
|
||||||
|
<TARGET_DESTINATION Condition="'$(OVERRIDE_TARGET_DESTINATION)'!='true'">wudf</TARGET_DESTINATION>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<InvokedTargetsList Include="$(OBJ_PATH)\$(O)\vpcd.inf">
|
||||||
|
<Pass>1</Pass>
|
||||||
|
<Condition>
|
||||||
|
</Condition>
|
||||||
|
</InvokedTargetsList>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
||||||
152
virtualsmartcard/win32/vpcd/vpcd-Package/vpcd-Package.vcxproj
Normal file
152
virtualsmartcard/win32/vpcd/vpcd-Package/vpcd-Package.vcxproj
Normal file
@@ -0,0 +1,152 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Win8.1 Debug|Win32">
|
||||||
|
<Configuration>Win8.1 Debug</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Win8.1 Release|Win32">
|
||||||
|
<Configuration>Win8.1 Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Win8 Debug|Win32">
|
||||||
|
<Configuration>Win8 Debug</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Win8 Release|Win32">
|
||||||
|
<Configuration>Win8 Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Win7 Debug|Win32">
|
||||||
|
<Configuration>Win7 Debug</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Win7 Release|Win32">
|
||||||
|
<Configuration>Win7 Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Win8.1 Debug|x64">
|
||||||
|
<Configuration>Win8.1 Debug</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Win8.1 Release|x64">
|
||||||
|
<Configuration>Win8.1 Release</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Win8 Debug|x64">
|
||||||
|
<Configuration>Win8 Debug</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Win8 Release|x64">
|
||||||
|
<Configuration>Win8 Release</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Win7 Debug|x64">
|
||||||
|
<Configuration>Win7 Debug</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Win7 Release|x64">
|
||||||
|
<Configuration>Win7 Release</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="PropertySheets">
|
||||||
|
<PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset>
|
||||||
|
<ConfigurationType>Utility</ConfigurationType>
|
||||||
|
<DriverType>Package</DriverType>
|
||||||
|
<DisableFastUpToDateCheck>true</DisableFastUpToDateCheck>
|
||||||
|
<Configuration>Win8.1 Debug</Configuration>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectGuid>{7D06C4DD-96FC-4421-96F1-C90A6093A6F5}</ProjectGuid>
|
||||||
|
<RootNamespace>$(MSBuildProjectName)</RootNamespace>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win8.1 Debug|Win32'" Label="Configuration">
|
||||||
|
<TargetVersion>WindowsV6.3</TargetVersion>
|
||||||
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win8.1 Release|Win32'" Label="Configuration">
|
||||||
|
<TargetVersion>WindowsV6.3</TargetVersion>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win8 Debug|Win32'" Label="Configuration">
|
||||||
|
<TargetVersion>Windows8</TargetVersion>
|
||||||
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win8 Release|Win32'" Label="Configuration">
|
||||||
|
<TargetVersion>Windows8</TargetVersion>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win7 Debug|Win32'" Label="Configuration">
|
||||||
|
<TargetVersion>Windows7</TargetVersion>
|
||||||
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win7 Release|Win32'" Label="Configuration">
|
||||||
|
<TargetVersion>Windows7</TargetVersion>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win8.1 Debug|x64'" Label="Configuration">
|
||||||
|
<TargetVersion>WindowsV6.3</TargetVersion>
|
||||||
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win8.1 Release|x64'" Label="Configuration">
|
||||||
|
<TargetVersion>WindowsV6.3</TargetVersion>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win8 Debug|x64'" Label="Configuration">
|
||||||
|
<TargetVersion>Windows8</TargetVersion>
|
||||||
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win8 Release|x64'" Label="Configuration">
|
||||||
|
<TargetVersion>Windows8</TargetVersion>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win7 Debug|x64'" Label="Configuration">
|
||||||
|
<TargetVersion>Windows7</TargetVersion>
|
||||||
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win7 Release|x64'" Label="Configuration">
|
||||||
|
<TargetVersion>Windows7</TargetVersion>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup />
|
||||||
|
<PropertyGroup>
|
||||||
|
<DebuggerFlavor>DbgengRemoteDebugger</DebuggerFlavor>
|
||||||
|
<EnableDeployment>False</EnableDeployment>
|
||||||
|
<ImportToStore>False</ImportToStore>
|
||||||
|
<InstallMode>None</InstallMode>
|
||||||
|
<HardwareIdString />
|
||||||
|
<CommandLine />
|
||||||
|
<ScriptPath />
|
||||||
|
<DeployFiles />
|
||||||
|
<ScriptName />
|
||||||
|
<ScriptDeviceQuery>%PathToInf%</ScriptDeviceQuery>
|
||||||
|
<EnableVerifier>False</EnableVerifier>
|
||||||
|
<AllDrivers>False</AllDrivers>
|
||||||
|
<VerifyProjectOutput>True</VerifyProjectOutput>
|
||||||
|
<VerifyDrivers />
|
||||||
|
<VerifyFlags>133563</VerifyFlags>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<!--Inf Include="DriverInf.inv" /-->
|
||||||
|
<FilesToPackage Include="@(Inf->'%(CopyOutput)')" Condition="'@(Inf)'!=''" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\vpcd.vcxproj">
|
||||||
|
<Project>{B019D202-420C-484D-9303-45B552A05B95}</Project>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
||||||
80
virtualsmartcard/win32/vpcd/vpcd.inx
Normal file
80
virtualsmartcard/win32/vpcd/vpcd.inx
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
;
|
||||||
|
; VirtualCardReader.inf
|
||||||
|
;
|
||||||
|
|
||||||
|
[Version]
|
||||||
|
Signature="$Windows NT$"
|
||||||
|
Class=SmartCardReader
|
||||||
|
ClassGuid={50dd5230-ba8a-11d1-bf5d-0000f805f530}
|
||||||
|
Provider=%MSFTUMDF%
|
||||||
|
CatalogFile=WUDF.cat
|
||||||
|
DriverVer=11/22/2010,6.1.7600.16385
|
||||||
|
|
||||||
|
[Manufacturer]
|
||||||
|
%MSFTUMDF%=Microsoft,NT$ARCH$
|
||||||
|
|
||||||
|
[Microsoft.NT$ARCH$]
|
||||||
|
%ReaderDeviceName%=VReader_Install,root\vpcd
|
||||||
|
|
||||||
|
; =================== Virtual Reader Device ==================================
|
||||||
|
|
||||||
|
[VReader_Install.NT]
|
||||||
|
CopyFiles=UMDriverCopy
|
||||||
|
|
||||||
|
[VReader_Install.NT.hw]
|
||||||
|
|
||||||
|
[VReader_Install.NT.Services]
|
||||||
|
AddService=WUDFRd,0x000001fa,WUDFRD_ServiceInstall
|
||||||
|
|
||||||
|
[VReader_Install.NT.CoInstallers]
|
||||||
|
AddReg=CoInstallers_AddReg
|
||||||
|
CopyFiles=CoInstallers_CopyFiles
|
||||||
|
|
||||||
|
[VReader_Install.NT.Wdf]
|
||||||
|
UmdfService=vpcd,UMDFVReader_Install
|
||||||
|
UmdfServiceOrder=vpcd
|
||||||
|
UmdfKernelModeClientPolicy=AllowKernelModeClients
|
||||||
|
|
||||||
|
; =================== UMDF Service Install section ===================
|
||||||
|
|
||||||
|
[UMDFVReader_Install]
|
||||||
|
UmdfLibraryVersion=$UMDFVERSION$
|
||||||
|
ServiceBinary=%12%\UMDF\vpcd.dll
|
||||||
|
DriverCLSID={d4112073-d09b-458f-a5aa-35ef21eef5de}
|
||||||
|
|
||||||
|
[WUDFRD_ServiceInstall]
|
||||||
|
DisplayName = %WudfRdDisplayName%
|
||||||
|
ServiceType = 1
|
||||||
|
StartType = 3
|
||||||
|
ErrorControl = 1
|
||||||
|
ServiceBinary = %12%\WUDFRd.sys
|
||||||
|
LoadOrderGroup = Base
|
||||||
|
|
||||||
|
[SourceDisksFiles]
|
||||||
|
vpcd.dll=1
|
||||||
|
WudfUpdate_01009.dll=1
|
||||||
|
|
||||||
|
[SourceDisksNames]
|
||||||
|
1 = %MediaDescription%
|
||||||
|
|
||||||
|
[CoInstallers_CopyFiles]
|
||||||
|
WudfUpdate_$UMDFCOINSTALLERVERSION$.dll
|
||||||
|
|
||||||
|
[CoInstallers_AddReg]
|
||||||
|
HKR,,CoInstallers32,0x00010000,"WUDFUpdate_$UMDFCOINSTALLERVERSION$.dll"
|
||||||
|
|
||||||
|
[DestinationDirs]
|
||||||
|
UMDriverCopy=12,UMDF ; copy to driversMdf
|
||||||
|
CoInstallers_CopyFiles=11
|
||||||
|
|
||||||
|
[UMDriverCopy]
|
||||||
|
vpcd.dll
|
||||||
|
|
||||||
|
; =================== Generic ==================================
|
||||||
|
|
||||||
|
[Strings]
|
||||||
|
MSFTUMDF="Virtual Smart Card Architecture"
|
||||||
|
MediaDescription="Virtual PCD Media"
|
||||||
|
WudfRdDisplayName="UMDF Virtual Smart Card Reader for ScardVisual"
|
||||||
|
ReaderDeviceName="Virtual PCD"
|
||||||
|
|
||||||
100
virtualsmartcard/win32/vpcd/vpcd.rc
Normal file
100
virtualsmartcard/win32/vpcd/vpcd.rc
Normal file
@@ -0,0 +1,100 @@
|
|||||||
|
// Microsoft Visual C++ generated resource script.
|
||||||
|
//
|
||||||
|
#include "resource.h"
|
||||||
|
|
||||||
|
#define APSTUDIO_READONLY_SYMBOLS
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Generated from the TEXTINCLUDE 2 resource.
|
||||||
|
//
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
#undef APSTUDIO_READONLY_SYMBOLS
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Italian (Italy) resources
|
||||||
|
|
||||||
|
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ITA)
|
||||||
|
#ifdef _WIN32
|
||||||
|
LANGUAGE LANG_ITALIAN, SUBLANG_ITALIAN
|
||||||
|
#pragma code_page(1252)
|
||||||
|
#endif //_WIN32
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Version
|
||||||
|
//
|
||||||
|
|
||||||
|
VS_VERSION_INFO VERSIONINFO
|
||||||
|
FILEVERSION 6,0,6000,16384
|
||||||
|
PRODUCTVERSION 6,0,6000,16384
|
||||||
|
FILEFLAGSMASK 0x3fL
|
||||||
|
#ifdef _DEBUG
|
||||||
|
FILEFLAGS 0x9L
|
||||||
|
#else
|
||||||
|
FILEFLAGS 0x8L
|
||||||
|
#endif
|
||||||
|
FILEOS 0x40004L
|
||||||
|
FILETYPE 0x2L
|
||||||
|
FILESUBTYPE 0x0L
|
||||||
|
BEGIN
|
||||||
|
BLOCK "StringFileInfo"
|
||||||
|
BEGIN
|
||||||
|
BLOCK "001004b0"
|
||||||
|
BEGIN
|
||||||
|
VALUE "CompanyName", "Windows (R) Codename Longhorn DDK provider"
|
||||||
|
VALUE "FileDescription", "Virtual Smart Card Driver"
|
||||||
|
VALUE "FileVersion", "6.0.6000.16384"
|
||||||
|
VALUE "InternalName", "vpcd"
|
||||||
|
VALUE "LegalCopyright", "<22> Microsoft Corporation. All rights reserved."
|
||||||
|
VALUE "OriginalFilename", "vpcd.dll"
|
||||||
|
VALUE "ProductName", "Windows (R) Codename Longhorn DDK driver"
|
||||||
|
VALUE "ProductVersion", "6.0.6000.16384"
|
||||||
|
END
|
||||||
|
END
|
||||||
|
BLOCK "VarFileInfo"
|
||||||
|
BEGIN
|
||||||
|
VALUE "Translation", 0x10, 1200
|
||||||
|
END
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef APSTUDIO_INVOKED
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// TEXTINCLUDE
|
||||||
|
//
|
||||||
|
|
||||||
|
1 TEXTINCLUDE
|
||||||
|
BEGIN
|
||||||
|
"resource.h\0"
|
||||||
|
END
|
||||||
|
|
||||||
|
2 TEXTINCLUDE
|
||||||
|
BEGIN
|
||||||
|
"\0"
|
||||||
|
END
|
||||||
|
|
||||||
|
3 TEXTINCLUDE
|
||||||
|
BEGIN
|
||||||
|
"\r\n"
|
||||||
|
"\0"
|
||||||
|
END
|
||||||
|
|
||||||
|
#endif // APSTUDIO_INVOKED
|
||||||
|
|
||||||
|
#endif // Italian (Italy) resources
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef APSTUDIO_INVOKED
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Generated from the TEXTINCLUDE 3 resource.
|
||||||
|
//
|
||||||
|
|
||||||
|
P
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
#endif // not APSTUDIO_INVOKED
|
||||||
|
|
||||||
83
virtualsmartcard/win32/vpcd/vpcd.sln
Normal file
83
virtualsmartcard/win32/vpcd/vpcd.sln
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
|
# Visual Studio 2013
|
||||||
|
VisualStudioVersion = 12.0
|
||||||
|
MinimumVisualStudioVersion = 12.0
|
||||||
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Vpcd-Package", "Vpcd-Package", "{B4A2C5E7-24D0-4EBB-A564-5F52DD858932}"
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vpcd-Package", "vpcd-Package\vpcd-Package.vcxproj", "{7D06C4DD-96FC-4421-96F1-C90A6093A6F5}"
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vpcd", "vpcd.vcxproj", "{B019D202-420C-484D-9303-45B552A05B95}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Win8.1 Debug|Win32 = Win8.1 Debug|Win32
|
||||||
|
Win8.1 Debug|x64 = Win8.1 Debug|x64
|
||||||
|
Win8.1 Release|Win32 = Win8.1 Release|Win32
|
||||||
|
Win8.1 Release|x64 = Win8.1 Release|x64
|
||||||
|
Win8 Debug|Win32 = Win8 Debug|Win32
|
||||||
|
Win8 Debug|x64 = Win8 Debug|x64
|
||||||
|
Win8 Release|Win32 = Win8 Release|Win32
|
||||||
|
Win8 Release|x64 = Win8 Release|x64
|
||||||
|
Win7 Debug|Win32 = Win7 Debug|Win32
|
||||||
|
Win7 Debug|x64 = Win7 Debug|x64
|
||||||
|
Win7 Release|Win32 = Win7 Release|Win32
|
||||||
|
Win7 Release|x64 = Win7 Release|x64
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{7D06C4DD-96FC-4421-96F1-C90A6093A6F5}.Win8.1 Debug|Win32.ActiveCfg = Win8.1 Debug|Win32
|
||||||
|
{7D06C4DD-96FC-4421-96F1-C90A6093A6F5}.Win8.1 Debug|Win32.Build.0 = Win8.1 Debug|Win32
|
||||||
|
{7D06C4DD-96FC-4421-96F1-C90A6093A6F5}.Win8.1 Debug|x64.ActiveCfg = Win8.1 Debug|x64
|
||||||
|
{7D06C4DD-96FC-4421-96F1-C90A6093A6F5}.Win8.1 Debug|x64.Build.0 = Win8.1 Debug|x64
|
||||||
|
{7D06C4DD-96FC-4421-96F1-C90A6093A6F5}.Win8.1 Release|Win32.ActiveCfg = Win8.1 Release|Win32
|
||||||
|
{7D06C4DD-96FC-4421-96F1-C90A6093A6F5}.Win8.1 Release|Win32.Build.0 = Win8.1 Release|Win32
|
||||||
|
{7D06C4DD-96FC-4421-96F1-C90A6093A6F5}.Win8.1 Release|x64.ActiveCfg = Win8.1 Release|x64
|
||||||
|
{7D06C4DD-96FC-4421-96F1-C90A6093A6F5}.Win8.1 Release|x64.Build.0 = Win8.1 Release|x64
|
||||||
|
{7D06C4DD-96FC-4421-96F1-C90A6093A6F5}.Win8 Debug|Win32.ActiveCfg = Win8 Debug|Win32
|
||||||
|
{7D06C4DD-96FC-4421-96F1-C90A6093A6F5}.Win8 Debug|Win32.Build.0 = Win8 Debug|Win32
|
||||||
|
{7D06C4DD-96FC-4421-96F1-C90A6093A6F5}.Win8 Debug|x64.ActiveCfg = Win8 Debug|x64
|
||||||
|
{7D06C4DD-96FC-4421-96F1-C90A6093A6F5}.Win8 Debug|x64.Build.0 = Win8 Debug|x64
|
||||||
|
{7D06C4DD-96FC-4421-96F1-C90A6093A6F5}.Win8 Release|Win32.ActiveCfg = Win8 Release|Win32
|
||||||
|
{7D06C4DD-96FC-4421-96F1-C90A6093A6F5}.Win8 Release|Win32.Build.0 = Win8 Release|Win32
|
||||||
|
{7D06C4DD-96FC-4421-96F1-C90A6093A6F5}.Win8 Release|x64.ActiveCfg = Win8 Release|x64
|
||||||
|
{7D06C4DD-96FC-4421-96F1-C90A6093A6F5}.Win8 Release|x64.Build.0 = Win8 Release|x64
|
||||||
|
{7D06C4DD-96FC-4421-96F1-C90A6093A6F5}.Win7 Debug|Win32.ActiveCfg = Win7 Debug|Win32
|
||||||
|
{7D06C4DD-96FC-4421-96F1-C90A6093A6F5}.Win7 Debug|Win32.Build.0 = Win7 Debug|Win32
|
||||||
|
{7D06C4DD-96FC-4421-96F1-C90A6093A6F5}.Win7 Debug|x64.ActiveCfg = Win7 Debug|x64
|
||||||
|
{7D06C4DD-96FC-4421-96F1-C90A6093A6F5}.Win7 Debug|x64.Build.0 = Win7 Debug|x64
|
||||||
|
{7D06C4DD-96FC-4421-96F1-C90A6093A6F5}.Win7 Release|Win32.ActiveCfg = Win7 Release|Win32
|
||||||
|
{7D06C4DD-96FC-4421-96F1-C90A6093A6F5}.Win7 Release|Win32.Build.0 = Win7 Release|Win32
|
||||||
|
{7D06C4DD-96FC-4421-96F1-C90A6093A6F5}.Win7 Release|x64.ActiveCfg = Win7 Release|x64
|
||||||
|
{7D06C4DD-96FC-4421-96F1-C90A6093A6F5}.Win7 Release|x64.Build.0 = Win7 Release|x64
|
||||||
|
{B019D202-420C-484D-9303-45B552A05B95}.Win8.1 Debug|Win32.ActiveCfg = Win8.1 Debug|Win32
|
||||||
|
{B019D202-420C-484D-9303-45B552A05B95}.Win8.1 Debug|Win32.Build.0 = Win8.1 Debug|Win32
|
||||||
|
{B019D202-420C-484D-9303-45B552A05B95}.Win8.1 Debug|x64.ActiveCfg = Win8.1 Debug|x64
|
||||||
|
{B019D202-420C-484D-9303-45B552A05B95}.Win8.1 Debug|x64.Build.0 = Win8.1 Debug|x64
|
||||||
|
{B019D202-420C-484D-9303-45B552A05B95}.Win8.1 Release|Win32.ActiveCfg = Win8.1 Release|Win32
|
||||||
|
{B019D202-420C-484D-9303-45B552A05B95}.Win8.1 Release|Win32.Build.0 = Win8.1 Release|Win32
|
||||||
|
{B019D202-420C-484D-9303-45B552A05B95}.Win8.1 Release|x64.ActiveCfg = Win8.1 Release|x64
|
||||||
|
{B019D202-420C-484D-9303-45B552A05B95}.Win8.1 Release|x64.Build.0 = Win8.1 Release|x64
|
||||||
|
{B019D202-420C-484D-9303-45B552A05B95}.Win8 Debug|Win32.ActiveCfg = Win8 Debug|Win32
|
||||||
|
{B019D202-420C-484D-9303-45B552A05B95}.Win8 Debug|Win32.Build.0 = Win8 Debug|Win32
|
||||||
|
{B019D202-420C-484D-9303-45B552A05B95}.Win8 Debug|x64.ActiveCfg = Win8 Debug|x64
|
||||||
|
{B019D202-420C-484D-9303-45B552A05B95}.Win8 Debug|x64.Build.0 = Win8 Debug|x64
|
||||||
|
{B019D202-420C-484D-9303-45B552A05B95}.Win8 Release|Win32.ActiveCfg = Win8 Release|Win32
|
||||||
|
{B019D202-420C-484D-9303-45B552A05B95}.Win8 Release|Win32.Build.0 = Win8 Release|Win32
|
||||||
|
{B019D202-420C-484D-9303-45B552A05B95}.Win8 Release|x64.ActiveCfg = Win8 Release|x64
|
||||||
|
{B019D202-420C-484D-9303-45B552A05B95}.Win8 Release|x64.Build.0 = Win8 Release|x64
|
||||||
|
{B019D202-420C-484D-9303-45B552A05B95}.Win7 Debug|Win32.ActiveCfg = Win7 Debug|Win32
|
||||||
|
{B019D202-420C-484D-9303-45B552A05B95}.Win7 Debug|Win32.Build.0 = Win7 Debug|Win32
|
||||||
|
{B019D202-420C-484D-9303-45B552A05B95}.Win7 Debug|x64.ActiveCfg = Win7 Debug|x64
|
||||||
|
{B019D202-420C-484D-9303-45B552A05B95}.Win7 Debug|x64.Build.0 = Win7 Debug|x64
|
||||||
|
{B019D202-420C-484D-9303-45B552A05B95}.Win7 Release|Win32.ActiveCfg = Win7 Release|Win32
|
||||||
|
{B019D202-420C-484D-9303-45B552A05B95}.Win7 Release|Win32.Build.0 = Win7 Release|Win32
|
||||||
|
{B019D202-420C-484D-9303-45B552A05B95}.Win7 Release|x64.ActiveCfg = Win7 Release|x64
|
||||||
|
{B019D202-420C-484D-9303-45B552A05B95}.Win7 Release|x64.Build.0 = Win7 Release|x64
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(NestedProjects) = preSolution
|
||||||
|
{7D06C4DD-96FC-4421-96F1-C90A6093A6F5} = {B4A2C5E7-24D0-4EBB-A564-5F52DD858932}
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
||||||
217
virtualsmartcard/win32/vpcd/vpcd.vcxproj
Normal file
217
virtualsmartcard/win32/vpcd/vpcd.vcxproj
Normal file
@@ -0,0 +1,217 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Win8.1 Debug|Win32">
|
||||||
|
<Configuration>Win8.1 Debug</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Win8 Debug|Win32">
|
||||||
|
<Configuration>Win8 Debug</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Win7 Debug|Win32">
|
||||||
|
<Configuration>Win7 Debug</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Win8.1 Release|Win32">
|
||||||
|
<Configuration>Win8.1 Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Win8 Release|Win32">
|
||||||
|
<Configuration>Win8 Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Win7 Release|Win32">
|
||||||
|
<Configuration>Win7 Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Win8.1 Debug|x64">
|
||||||
|
<Configuration>Win8.1 Debug</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Win8 Debug|x64">
|
||||||
|
<Configuration>Win8 Debug</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Win7 Debug|x64">
|
||||||
|
<Configuration>Win7 Debug</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Win8.1 Release|x64">
|
||||||
|
<Configuration>Win8.1 Release</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Win8 Release|x64">
|
||||||
|
<Configuration>Win8 Release</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Win7 Release|x64">
|
||||||
|
<Configuration>Win7 Release</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="PropertySheets">
|
||||||
|
<PlatformToolset>WindowsUserModeDriver8.1</PlatformToolset>
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<DriverType>UMDF</DriverType>
|
||||||
|
<TARGETNAME>vpcd</TARGETNAME>
|
||||||
|
<Configuration Condition="'$(Configuration)' == ''">Win8.1 Debug</Configuration>
|
||||||
|
<Platform Condition="'$(Platform)' == ''">Win32</Platform>
|
||||||
|
<ConvertedTarget0_Disabled>True</ConvertedTarget0_Disabled>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Label="PropertySheets">
|
||||||
|
<ConversionToolVersion>1.0</ConversionToolVersion>
|
||||||
|
<BUILD_ALT_DIR>$(Configuration.Replace(' ',''))</BUILD_ALT_DIR>
|
||||||
|
<IntDir Condition="'$(Platform)'!='Win32'">$(BUILD_ALT_DIR)\$(Platform)\</IntDir>
|
||||||
|
<IntDir Condition="'$(Platform)'=='Win32'">$(BUILD_ALT_DIR)\x86\</IntDir>
|
||||||
|
<OutDir>$(IntDir)</OutDir>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ImportGroup Label="PreConfiguration">
|
||||||
|
<Import Project="$(VCTargetsPath)\WDKConversion\PreConfiguration.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectGuid>{B019D202-420C-484D-9303-45B552A05B95}</ProjectGuid>
|
||||||
|
<RootNamespace>$(MSBuildProjectName)</RootNamespace>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Win8.1 Debug|Win32'">
|
||||||
|
<TargetVersion>WindowsV6.3</TargetVersion>
|
||||||
|
<UseDebugLibraries>True</UseDebugLibraries>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Win8 Debug|Win32'">
|
||||||
|
<TargetVersion>Win8</TargetVersion>
|
||||||
|
<UseDebugLibraries>True</UseDebugLibraries>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Win7 Debug|Win32'">
|
||||||
|
<TargetVersion>Win7</TargetVersion>
|
||||||
|
<UseDebugLibraries>True</UseDebugLibraries>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Win8.1 Release|Win32'">
|
||||||
|
<TargetVersion>WindowsV6.3</TargetVersion>
|
||||||
|
<UseDebugLibraries>False</UseDebugLibraries>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Win8 Release|Win32'">
|
||||||
|
<TargetVersion>Win8</TargetVersion>
|
||||||
|
<UseDebugLibraries>False</UseDebugLibraries>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Win7 Release|Win32'">
|
||||||
|
<TargetVersion>Win7</TargetVersion>
|
||||||
|
<UseDebugLibraries>False</UseDebugLibraries>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Win8.1 Debug|x64'">
|
||||||
|
<TargetVersion>WindowsV6.3</TargetVersion>
|
||||||
|
<UseDebugLibraries>True</UseDebugLibraries>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Win8 Debug|x64'">
|
||||||
|
<TargetVersion>Win8</TargetVersion>
|
||||||
|
<UseDebugLibraries>True</UseDebugLibraries>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Win7 Debug|x64'">
|
||||||
|
<TargetVersion>Win7</TargetVersion>
|
||||||
|
<UseDebugLibraries>True</UseDebugLibraries>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Win8.1 Release|x64'">
|
||||||
|
<TargetVersion>WindowsV6.3</TargetVersion>
|
||||||
|
<UseDebugLibraries>False</UseDebugLibraries>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Win8 Release|x64'">
|
||||||
|
<TargetVersion>Win8</TargetVersion>
|
||||||
|
<UseDebugLibraries>False</UseDebugLibraries>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Win7 Release|x64'">
|
||||||
|
<TargetVersion>Win7</TargetVersion>
|
||||||
|
<UseDebugLibraries>False</UseDebugLibraries>
|
||||||
|
</PropertyGroup>
|
||||||
|
<!-- Needed by any VcxProj -->
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Win7 Release|x64'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Win8 Release|x64'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Win8.1 Release|x64'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Win7 Debug|x64'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Win8 Debug|x64'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Win8.1 Debug|x64'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Win7 Release|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Win8 Release|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Win8.1 Release|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Win7 Debug|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Win8 Debug|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Win8.1 Debug|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<!-- The WrappedTaskItems label is used by the conversion tool to identify the location where items
|
||||||
|
associated with wrapped tasks will reside.-->
|
||||||
|
<ItemGroup Label="WrappedTaskItems">
|
||||||
|
<Inf Include="vpcd.inx">
|
||||||
|
<Architecture>$(_BUILDARCH)</Architecture>
|
||||||
|
<SpecifyArchitecture>true</SpecifyArchitecture>
|
||||||
|
<KmdfVersionNumber>1.9</KmdfVersionNumber>
|
||||||
|
<UmdfVersionNumber>1.9.0</UmdfVersionNumber>
|
||||||
|
<CopyOutput>$(OBJ_PATH)\$(O)\vpcd.inf</CopyOutput>
|
||||||
|
</Inf>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Win7 Debug|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<AdditionalIncludeDirectories>$(ProjectDir)\..\..\src\vpcd;%(AdditionalIncludeDirectories);$(Includes);$(User_Includes)</AdditionalIncludeDirectories>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<!-- We only add items (e.g. form ClSourceFiles) that do not already exist (e.g in the ClCompile list), this avoids duplication -->
|
||||||
|
<ClCompile Include="..\..\src\vpcd\vpcd.c" />
|
||||||
|
<ClCompile Include="@(ClSourceFiles)" Exclude="@(ClCompile)" />
|
||||||
|
<ResourceCompile Include="@(RcSourceFiles)" Exclude="@(ResourceCompile)" />
|
||||||
|
<Midl Include="@(IdlSourceFiles)" Exclude="@(Midl)" />
|
||||||
|
<MessageCompile Include="@(McSourceFiles)" Exclude="@(MessageCompile)" />
|
||||||
|
<MASM Include="@(AsmSourceFiles)" Exclude="@(MASM)" />
|
||||||
|
<GenerateBmf Include="@(MofSourceFiles)" Exclude="@(GenerateBmf)" />
|
||||||
|
</ItemGroup>
|
||||||
|
<!-- Set default environment variables, e.g. for stampinf -->
|
||||||
|
<ItemGroup>
|
||||||
|
<BuildMacro Include="SDK_INC_PATH">
|
||||||
|
<Value>$(KIT_SHARED_INC_PATH)</Value>
|
||||||
|
<EnvironmentVariable>true</EnvironmentVariable>
|
||||||
|
</BuildMacro>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Inf Exclude="@(Inf)" Include="$(DDK_INF_FILES)" />
|
||||||
|
<Inf Exclude="@(Inf)" Include="*.inf" />
|
||||||
|
<FilesToPackage Include="$(TargetPath)" Condition="'$(ConfigurationType)'=='Driver' or '$(ConfigurationType)'=='DynamicLibrary'" />
|
||||||
|
<FilesToPackage Include="$(DDK_PACKAGE_FILES)" />
|
||||||
|
</ItemGroup>
|
||||||
|
<!-- Necessary to pick up propper files from local directory when in the IDE-->
|
||||||
|
<ItemGroup>
|
||||||
|
<None Exclude="@(None)" Include="*.txt;*.htm;*.html" />
|
||||||
|
<None Exclude="@(None)" Include="*.ico;*.cur;*.bmp;*.dlg;*.rct;*.gif;*.jpg;*.jpeg;*.wav;*.jpe;*.tiff;*.tif;*.png;*.rc2" />
|
||||||
|
<None Exclude="@(None)" Include="*.def;*.bat;*.hpj;*.asmx" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Exclude="@(ClInclude)" Include="*.h;*.hpp;*.hxx;*.hm;*.inl;*.xsd" />
|
||||||
|
<ClInclude Include="..\..\src\vpcd\vpcd.h" />
|
||||||
|
</ItemGroup>
|
||||||
|
<!-- /Necessary to pick up propper files from local directory when in the IDE-->
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
</Project>
|
||||||
Reference in New Issue
Block a user