mirror of
https://github.com/reactos/reactos.git
synced 2024-12-28 10:04:49 +00:00
Removed M$ driver
svn path=/trunk/; revision=1294
This commit is contained in:
parent
891b9b74ee
commit
6db1a5193f
11 changed files with 0 additions and 758 deletions
|
@ -1,2 +0,0 @@
|
|||
DIRS=exe \
|
||||
sys
|
|
@ -1,168 +0,0 @@
|
|||
/*++
|
||||
|
||||
Copyright (c) 1996 Microsoft Corporation
|
||||
|
||||
Module Name:
|
||||
|
||||
EventTest.c
|
||||
|
||||
Abstract:
|
||||
|
||||
Simple console test app demonstrating how a Win32 app can share
|
||||
an event object with a kernel-mode driver. For more information
|
||||
on using Event Objects at the application level see the Win32 SDK.
|
||||
|
||||
Author:
|
||||
|
||||
Jeff Midkiff (jeffmi) 23-Jul-96
|
||||
|
||||
Enviroment:
|
||||
|
||||
User Mode
|
||||
|
||||
Revision History:
|
||||
|
||||
--*/
|
||||
|
||||
|
||||
//
|
||||
// INCLUDES
|
||||
//
|
||||
#include <windows.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <winioctl.h>
|
||||
#include <conio.h>
|
||||
|
||||
#include "event.h"
|
||||
|
||||
|
||||
//
|
||||
// MAIN
|
||||
//
|
||||
void __cdecl
|
||||
main(
|
||||
int argc,
|
||||
char ** argv
|
||||
)
|
||||
{
|
||||
BOOL bStatus;
|
||||
HANDLE hDevice;
|
||||
ULONG ulReturnedLength;
|
||||
|
||||
SET_EVENT setEvent;
|
||||
FLOAT fDelay;
|
||||
|
||||
|
||||
if ( (argc < 2) || (argv[1] == NULL) ) {
|
||||
printf("event <delay>\n");
|
||||
printf("\twhere <delay> = time to delay the event signal in seconds.\n");
|
||||
exit(0);
|
||||
}
|
||||
sscanf( argv[1], "%f", &fDelay );
|
||||
|
||||
//
|
||||
// open the device
|
||||
//
|
||||
hDevice = CreateFile(
|
||||
"\\\\.\\EVENT", // lpFileName
|
||||
GENERIC_READ | GENERIC_WRITE, // dwDesiredAccess
|
||||
FILE_SHARE_READ | FILE_SHARE_WRITE, // dwShareMode
|
||||
NULL, // lpSecurityAttributes
|
||||
OPEN_EXISTING, // dwCreationDistribution
|
||||
0, // dwFlagsAndAttributes
|
||||
NULL // hTemplateFile
|
||||
);
|
||||
|
||||
if (hDevice == INVALID_HANDLE_VALUE) {
|
||||
printf("CreateFile error = %d\n", GetLastError() );
|
||||
exit(0);
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// set the event signal delay
|
||||
//
|
||||
setEvent.DueTime.QuadPart = -((LONGLONG)(fDelay * 10.0E6));// use relative time for this sample
|
||||
|
||||
|
||||
//
|
||||
// test the driver for bad event handles
|
||||
//
|
||||
setEvent.hEvent = NULL;
|
||||
bStatus = DeviceIoControl(
|
||||
hDevice, // Handle to device
|
||||
IOCTL_SET_EVENT, // IO Control code
|
||||
&setEvent, // Input Buffer to driver.
|
||||
SIZEOF_SETEVENT, // Length of input buffer in bytes.
|
||||
NULL, // Output Buffer from driver.
|
||||
0, // Length of output buffer in bytes.
|
||||
&ulReturnedLength, // Bytes placed in buffer.
|
||||
NULL // synchronous call
|
||||
);
|
||||
if ( !bStatus ) {
|
||||
printf("Bad handle TEST returned code %d.\n\n", GetLastError() );
|
||||
} else {
|
||||
printf("we should never get here\n");
|
||||
exit(0);
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
//
|
||||
//
|
||||
setEvent.hEvent = CreateEvent(
|
||||
NULL, // lpEventAttributes
|
||||
TRUE, // bManualReset
|
||||
FALSE, // bInitialState
|
||||
NULL // lpName
|
||||
);
|
||||
|
||||
|
||||
if ( !setEvent.hEvent ) {
|
||||
printf("CreateEvent error = %d\n", GetLastError() );
|
||||
} else {
|
||||
|
||||
printf("Event HANDLE = 0x%x\n", setEvent.hEvent );
|
||||
printf("Press any key to exit.\n");
|
||||
while( !_kbhit() ) {
|
||||
bStatus = DeviceIoControl(
|
||||
hDevice, // Handle to device
|
||||
IOCTL_SET_EVENT, // IO Control code
|
||||
&setEvent, // Input Buffer to driver.
|
||||
SIZEOF_SETEVENT, // Length of input buffer in bytes.
|
||||
NULL, // Output Buffer from driver.
|
||||
0, // Length of output buffer in bytes.
|
||||
&ulReturnedLength, // Bytes placed in buffer.
|
||||
NULL // synchronous call
|
||||
);
|
||||
|
||||
if ( !bStatus ) {
|
||||
printf("Ioctl failed with code %d\n", GetLastError() );
|
||||
break;
|
||||
} else {
|
||||
printf("Waiting for Event...\n");
|
||||
|
||||
WaitForSingleObject(setEvent.hEvent,
|
||||
INFINITE );
|
||||
|
||||
printf("Event signalled.\n\n");
|
||||
|
||||
ResetEvent( setEvent.hEvent);
|
||||
//printf("Event reset.\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// close the driver
|
||||
//
|
||||
if ( !CloseHandle(hDevice) ) {
|
||||
printf("Failed to close device.\n");
|
||||
}
|
||||
|
||||
exit(0);
|
||||
}
|
||||
|
||||
|
||||
// EOF
|
|
@ -1,7 +0,0 @@
|
|||
#
|
||||
# DO NOT EDIT THIS FILE!!! Edit .\sources. if you want to add a new source
|
||||
# file to this component. This file merely indirects to the real make file
|
||||
# that is shared by all the driver components of the Windows NT DDK
|
||||
#
|
||||
|
||||
!INCLUDE $(NTMAKEENV)\makefile.def
|
|
@ -1,10 +0,0 @@
|
|||
TARGETNAME=event
|
||||
TARGETPATH=$(BASEDIR)\lib
|
||||
TARGETTYPE=PROGRAM
|
||||
|
||||
INCLUDES=..\sys
|
||||
|
||||
SOURCES=eventtest.c
|
||||
|
||||
UMTYPE=console
|
||||
UMBASE=0x100000
|
|
@ -1,50 +0,0 @@
|
|||
|
||||
This sample demonstrates one way that a Windows NT kernel-mode device driver
|
||||
can share and explicitly signal an Event Object with a Win32 application.
|
||||
It is composed of two parts, a Windows NT kernel-mode device driver and a Win32
|
||||
console test application. Both are built using the Windows NT DDK.
|
||||
|
||||
|
||||
Instructions:
|
||||
-------------
|
||||
|
||||
1) Build the driver and test application in either the FREE or CHECKED build environment:
|
||||
|
||||
BLD
|
||||
|
||||
Both the driver and application are put in %NTDDK%\LIB\*\FREE | CHECKED on your build machine.
|
||||
|
||||
|
||||
2) Copy the newly built driver to your Target machine's %SystemRoot%\system32\drivers
|
||||
directory. Copy the newly built application to your target machine.
|
||||
Also copy the EVENT.INI file to your Target machine.
|
||||
|
||||
|
||||
3) Update the Target machine's Registry by running REGINI.EXE on the EVENT.INI file, i.e.:
|
||||
|
||||
REGINI EVENT.INI
|
||||
|
||||
This adds a driver key under the
|
||||
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services tree in the Registry.
|
||||
You can verify this by running REGEDIT32.EXE and looking at the \Event key.
|
||||
|
||||
|
||||
4) Reboot the Target machine for the Registry changes to take effect.
|
||||
Your driver will not load until you reboot.
|
||||
|
||||
|
||||
5) Load the driver from the command line:
|
||||
|
||||
NET START EVENT
|
||||
|
||||
|
||||
6) Run the test app from the command line:
|
||||
|
||||
EVENT <DELAY>
|
||||
|
||||
where DELAY = time to delay the Event signal in seconds.
|
||||
|
||||
|
||||
7) Unload the driver from the command line:
|
||||
|
||||
NET STOP EVENT
|
|
@ -1,447 +0,0 @@
|
|||
/*++
|
||||
|
||||
Copyright (c) 1996 Microsoft Corporation
|
||||
|
||||
Module Name:
|
||||
|
||||
Event.c
|
||||
|
||||
Abstract:
|
||||
|
||||
This sample demonstrates one way that a Windows NT kernel-mode driver
|
||||
can share and explicitly signal an Event Object with a Win32 application.
|
||||
|
||||
This sample uses the following method:
|
||||
The application creates an event object using CreateEvent().
|
||||
The app passes the event handle to the driver in a private IOCTL.
|
||||
The driver is running in the app's thread context during the IOCTL so
|
||||
there is a valid user-mode handle at that time.
|
||||
The driver dereferences the user-mode handle into system space & saves
|
||||
the new system handle for later use.
|
||||
The driver signals the event via KeSetEvent() at IRQL <= DISPATCH_LEVEL.
|
||||
The driver MUST delete any driver references to the event object at
|
||||
Unload time.
|
||||
|
||||
An alternative method would be to create a named event in the driver via
|
||||
IoCreateNotificationEvent and then open the event in user mode. This API
|
||||
however is new to Windows NT 4.0 so you can not use this method in your
|
||||
NT 3.5x drivers.
|
||||
|
||||
Note that this sample's event can be signalled (almost) at will from within
|
||||
the driver. A different event signal can be set when the driver is setup to
|
||||
do asynchronous I/O, and it is opened with FILE_FLAG_OVERLAPPED, and an
|
||||
event handle is passed down in an OVERLAPPED struct from the app's Read,
|
||||
Write, or DeviceIoControl. This different event signal is set by the I/O
|
||||
Manager when the driver calls IoCompleteRequest on a pending Irp. This type
|
||||
of Irp completion signal is not the purpose of this sample, hence the lack of
|
||||
Irp queing.
|
||||
|
||||
Author:
|
||||
|
||||
Jeff Midkiff (jeffmi) 23-Jul-96
|
||||
|
||||
Enviroment:
|
||||
|
||||
Kernel Mode Only
|
||||
|
||||
Revision History:
|
||||
|
||||
--*/
|
||||
|
||||
|
||||
//
|
||||
// INCLUDES
|
||||
//
|
||||
#include "ntddk.h"
|
||||
#include "event.h"
|
||||
|
||||
//
|
||||
// DEFINES
|
||||
//
|
||||
#define USER_NAME L"\\DosDevices\\EVENT"
|
||||
#define SYSTEM_NAME L"\\Device\\EVENT"
|
||||
|
||||
//
|
||||
// DATA
|
||||
//
|
||||
typedef struct _DEVICE_EXTENSION {
|
||||
KDPC Dpc;
|
||||
KTIMER Timer;
|
||||
HANDLE hEvent;
|
||||
|
||||
} DEVICE_EXTENSION, *PDEVICE_EXTENSION;
|
||||
|
||||
|
||||
//
|
||||
// PROTOS
|
||||
//
|
||||
NTSTATUS
|
||||
DriverEntry(
|
||||
IN PDRIVER_OBJECT DriverObject,
|
||||
IN PUNICODE_STRING RegistryPath
|
||||
);
|
||||
|
||||
NTSTATUS
|
||||
Unload(
|
||||
IN PDRIVER_OBJECT DriverObject
|
||||
);
|
||||
|
||||
NTSTATUS
|
||||
Dispatch(
|
||||
IN PDEVICE_OBJECT DeviceObject,
|
||||
IN PIRP Irp
|
||||
);
|
||||
|
||||
VOID
|
||||
CustomTimerDPC(
|
||||
IN PKDPC Dpc,
|
||||
IN PVOID DeferredContext,
|
||||
IN PVOID SystemArgument1,
|
||||
IN PVOID SystemArgument2
|
||||
);
|
||||
|
||||
|
||||
NTSTATUS
|
||||
DriverEntry(
|
||||
IN PDRIVER_OBJECT DriverObject,
|
||||
IN PUNICODE_STRING RegistryPath
|
||||
)
|
||||
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
This routine gets called by the system to initialize the driver.
|
||||
|
||||
Arguments:
|
||||
|
||||
DriverObject - the system supplied driver object.
|
||||
RegistryPath - the system supplied registry path for this driver.
|
||||
|
||||
Return Value:
|
||||
|
||||
NTSTATUS
|
||||
|
||||
--*/
|
||||
|
||||
{
|
||||
|
||||
PDEVICE_OBJECT pDeviceObject;
|
||||
PDEVICE_EXTENSION pDeviceExtension;
|
||||
|
||||
UNICODE_STRING usSystemName;
|
||||
UNICODE_STRING usUserName;
|
||||
|
||||
NTSTATUS status;
|
||||
|
||||
|
||||
KdPrint(("Event!DriverEntry - IN\n"));
|
||||
|
||||
//
|
||||
// create the device object
|
||||
//
|
||||
RtlInitUnicodeString( &usSystemName, SYSTEM_NAME );
|
||||
|
||||
status = IoCreateDevice(
|
||||
DriverObject, // DriverObject
|
||||
sizeof( DEVICE_EXTENSION ), // DeviceExtensionSize
|
||||
&usSystemName, // DeviceName
|
||||
FILE_DEVICE_UNKNOWN, // DeviceType
|
||||
0, // DeviceCharacteristics
|
||||
TRUE, // Exclusive
|
||||
&pDeviceObject // DeviceObject
|
||||
);
|
||||
|
||||
if ( !NT_SUCCESS(status) ) {
|
||||
KdPrint(("\tIoCreateDevice returned 0x%x\n", status));
|
||||
|
||||
return( status );
|
||||
}
|
||||
|
||||
//
|
||||
// Set up dispatch entry points for the driver.
|
||||
//
|
||||
DriverObject->MajorFunction[IRP_MJ_CREATE] =
|
||||
DriverObject->MajorFunction[IRP_MJ_CLOSE] =
|
||||
DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = Dispatch;
|
||||
DriverObject->DriverUnload = Unload;
|
||||
|
||||
//
|
||||
// Create a symbolic link into user mode for the driver.
|
||||
//
|
||||
RtlInitUnicodeString( &usUserName, USER_NAME );
|
||||
status = IoCreateSymbolicLink( &usUserName, &usSystemName );
|
||||
|
||||
if ( !NT_SUCCESS(status) ) {
|
||||
IoDeleteDevice( pDeviceObject );
|
||||
KdPrint(("\tIoCreateSymbolicLink returned 0x%x\n", status));
|
||||
|
||||
return( status );
|
||||
}
|
||||
|
||||
//
|
||||
// establish user-buffer access method
|
||||
//
|
||||
pDeviceObject->Flags |= DO_BUFFERED_IO;
|
||||
|
||||
|
||||
//
|
||||
// setup the device extension
|
||||
//
|
||||
pDeviceExtension = pDeviceObject->DeviceExtension;
|
||||
|
||||
KeInitializeDpc(
|
||||
&pDeviceExtension->Dpc, // Dpc
|
||||
CustomTimerDPC, // DeferredRoutine
|
||||
pDeviceObject // DeferredContext
|
||||
);
|
||||
|
||||
KeInitializeTimer(
|
||||
&pDeviceExtension->Timer // Timer
|
||||
);
|
||||
|
||||
pDeviceExtension->hEvent = NULL;
|
||||
|
||||
KdPrint(("Event!DriverEntry - OUT\n"));
|
||||
|
||||
return( status );
|
||||
}
|
||||
|
||||
|
||||
|
||||
NTSTATUS
|
||||
Unload(
|
||||
IN PDRIVER_OBJECT DriverObject
|
||||
)
|
||||
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
This routine gets called to remove the driver from the system.
|
||||
|
||||
Arguments:
|
||||
|
||||
DriverObject - the system supplied driver object.
|
||||
|
||||
Return Value:
|
||||
|
||||
NTSTATUS
|
||||
|
||||
--*/
|
||||
|
||||
{
|
||||
|
||||
PDEVICE_OBJECT pDeviceObject = DriverObject->DeviceObject;
|
||||
PDEVICE_EXTENSION pDeviceExtension = pDeviceObject->DeviceExtension;
|
||||
UNICODE_STRING usUserName;
|
||||
|
||||
|
||||
KdPrint(("Event!Unload\n"));
|
||||
|
||||
//
|
||||
// dereference the event object or it will NEVER go away until reboot
|
||||
//
|
||||
if ( pDeviceExtension->hEvent )
|
||||
ObDereferenceObject( pDeviceExtension->hEvent );
|
||||
|
||||
// Delete the user-mode symbolic link.
|
||||
RtlInitUnicodeString( &usUserName, USER_NAME );
|
||||
IoDeleteSymbolicLink( &usUserName );
|
||||
|
||||
// Delete the DeviceObject
|
||||
IoDeleteDevice( pDeviceObject );
|
||||
|
||||
return( STATUS_SUCCESS );
|
||||
}
|
||||
|
||||
|
||||
|
||||
NTSTATUS
|
||||
Dispatch(
|
||||
IN PDEVICE_OBJECT DeviceObject,
|
||||
IN PIRP Irp
|
||||
)
|
||||
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
This device control dispatcher handles IOCTLs.
|
||||
|
||||
Arguments:
|
||||
|
||||
DeviceObject - Context for the activity.
|
||||
Irp - The device control argument block.
|
||||
|
||||
Return Value:
|
||||
|
||||
NTSTATUS
|
||||
|
||||
--*/
|
||||
|
||||
{
|
||||
|
||||
PDEVICE_EXTENSION pDeviceExtension;
|
||||
PIO_STACK_LOCATION pIrpStack;
|
||||
PSET_EVENT pSetEvent;
|
||||
|
||||
ULONG ulInformation = 0L;
|
||||
NTSTATUS status = STATUS_NOT_IMPLEMENTED;
|
||||
|
||||
|
||||
KdPrint(("Event!Dispatch - IN\n"));
|
||||
|
||||
pDeviceExtension = (PDEVICE_EXTENSION)DeviceObject->DeviceExtension;
|
||||
pIrpStack = IoGetCurrentIrpStackLocation( Irp );
|
||||
|
||||
switch( pIrpStack->MajorFunction )
|
||||
{
|
||||
case IRP_MJ_CREATE:
|
||||
case IRP_MJ_CLOSE:
|
||||
KdPrint(("\t%s\n", (IRP_MJ_CREATE == pIrpStack->MajorFunction) ? "IRP_MJ_CREATE" : "IRP_MJ_CLOSE"));
|
||||
|
||||
status = STATUS_SUCCESS;
|
||||
break;
|
||||
|
||||
case IRP_MJ_DEVICE_CONTROL:
|
||||
switch( pIrpStack->Parameters.DeviceIoControl.IoControlCode )
|
||||
{
|
||||
case IOCTL_SET_EVENT:
|
||||
KdPrint(("\tIOCTL_SET_EVENT\n"));
|
||||
|
||||
if ( pIrpStack->Parameters.DeviceIoControl.InputBufferLength < SIZEOF_SETEVENT ) {
|
||||
// Parameters are invalid
|
||||
KdPrint(("\tSTATUS_INVALID_PARAMETER\n"));
|
||||
|
||||
status = STATUS_INVALID_PARAMETER;
|
||||
} else {
|
||||
pSetEvent = (PSET_EVENT)Irp->AssociatedIrp.SystemBuffer;
|
||||
KdPrint(("\tuser-mode HANDLE = 0x%x\n", pSetEvent->hEvent ));
|
||||
|
||||
status = ObReferenceObjectByHandle( pSetEvent->hEvent,
|
||||
SYNCHRONIZE,
|
||||
NULL,
|
||||
KernelMode,
|
||||
&pDeviceExtension->hEvent,
|
||||
NULL
|
||||
);
|
||||
if ( !NT_SUCCESS(status) ) {
|
||||
|
||||
KdPrint(("\tUnable to reference User-Mode Event object, Error = 0x%x\n", status));
|
||||
|
||||
} else {
|
||||
|
||||
KdPrint(("\tkernel-mode HANDLE = 0x%x\n", pDeviceExtension->hEvent ));
|
||||
|
||||
//
|
||||
// Start the timer to run the CustomTimerDPC in DueTime seconds to
|
||||
// simulate an interrupt (which would queue a DPC).
|
||||
// The user's event object is signaled in the DPC.
|
||||
//
|
||||
|
||||
// ensure relative time for this sample
|
||||
if ( pSetEvent->DueTime.QuadPart > 0 )
|
||||
pSetEvent->DueTime.QuadPart = -(pSetEvent->DueTime.QuadPart);
|
||||
KdPrint(("\tDueTime = %d\n", pSetEvent->DueTime.QuadPart ));
|
||||
|
||||
KeSetTimer(
|
||||
&pDeviceExtension->Timer, // Timer
|
||||
pSetEvent->DueTime, // DueTime
|
||||
&pDeviceExtension->Dpc // Dpc
|
||||
);
|
||||
|
||||
status = STATUS_SUCCESS;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
// should never hit this
|
||||
ASSERT(0);
|
||||
status = STATUS_NOT_IMPLEMENTED;
|
||||
break;
|
||||
|
||||
} // switch IoControlCode
|
||||
break;
|
||||
|
||||
default:
|
||||
// should never hit this
|
||||
ASSERT(0);
|
||||
status = STATUS_NOT_IMPLEMENTED;
|
||||
break;
|
||||
|
||||
} // switch MajorFunction
|
||||
|
||||
|
||||
//
|
||||
// complete the Irp
|
||||
//
|
||||
Irp->IoStatus.Status = status;
|
||||
Irp->IoStatus.Information = ulInformation;
|
||||
IoCompleteRequest( Irp, IO_NO_INCREMENT );
|
||||
|
||||
KdPrint(("Event!Dispatch - OUT\n"));
|
||||
return status;
|
||||
}
|
||||
|
||||
|
||||
|
||||
VOID
|
||||
CustomTimerDPC(
|
||||
IN PKDPC Dpc,
|
||||
IN PVOID DeferredContext,
|
||||
IN PVOID SystemArgument1,
|
||||
IN PVOID SystemArgument2
|
||||
)
|
||||
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
This is the DPC associated with this drivers Timer object setup in DriverEntry.
|
||||
|
||||
Arguments:
|
||||
|
||||
Dpc - our DPC object associated with our Timer
|
||||
DeferredContext - Context for the DPC that we setup in DriverEntry
|
||||
SystemArgument1 -
|
||||
SystemArgument2 -
|
||||
|
||||
Return Value:
|
||||
|
||||
Nothing.
|
||||
|
||||
--*/
|
||||
|
||||
{
|
||||
|
||||
PDEVICE_OBJECT pDeviceObject = DeferredContext;
|
||||
PDEVICE_EXTENSION pDeviceExtension = pDeviceObject->DeviceExtension;
|
||||
|
||||
|
||||
KdPrint(("Event!CustomTimerDPC - IN\n"));
|
||||
|
||||
//
|
||||
// Signal the Event created user-mode
|
||||
//
|
||||
// Note:
|
||||
// Do not call KeSetEvent from your ISR;
|
||||
// you must call it at IRQL <= DISPATCH_LEVEL.
|
||||
// Your ISR should queue a DPC and the DPC can
|
||||
// then call KeSetEvent on the ISR's behalf.
|
||||
//
|
||||
KeSetEvent((PKEVENT)pDeviceExtension->hEvent,// Event
|
||||
0, // Increment
|
||||
FALSE // Wait
|
||||
);
|
||||
|
||||
// there is no Irp to complete here
|
||||
|
||||
KdPrint(("Event!CustomTimerDPC - OUT\n"));
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// EOF
|
|
@ -1,43 +0,0 @@
|
|||
/*++
|
||||
|
||||
Copyright (c) 1996 Microsoft Corporation
|
||||
|
||||
Module Name:
|
||||
|
||||
Event.h
|
||||
|
||||
Abstract:
|
||||
|
||||
|
||||
Author:
|
||||
|
||||
Jeff Midkiff (jeffmi) 23-Jul-96
|
||||
|
||||
Enviroment:
|
||||
|
||||
|
||||
Revision History:
|
||||
|
||||
--*/
|
||||
|
||||
#ifndef __EVENT__
|
||||
#define __EVENT__
|
||||
|
||||
|
||||
#include "devioctl.h"
|
||||
|
||||
typedef struct _SET_EVENT
|
||||
{
|
||||
HANDLE hEvent;
|
||||
LARGE_INTEGER DueTime; // requested DueTime in 100-nanosecond units
|
||||
|
||||
} SET_EVENT, *PSET_EVENT;
|
||||
|
||||
#define SIZEOF_SETEVENT sizeof(SET_EVENT)
|
||||
|
||||
|
||||
#define IOCTL_SET_EVENT \
|
||||
CTL_CODE( FILE_DEVICE_UNKNOWN, 0x800, METHOD_BUFFERED, FILE_ANY_ACCESS )
|
||||
|
||||
|
||||
#endif // __EVENT__
|
|
@ -1,7 +0,0 @@
|
|||
; note - the service name matches the driver's file (.sys) name
|
||||
|
||||
\Registry\Machine\System\CurrentControlSet\Services\Event
|
||||
Type = REG_DWORD 0x00000001
|
||||
Start = REG_DWORD 0x00000003
|
||||
Group = Extended Base
|
||||
ErrorControl = REG_DWORD 0x00000001
|
|
@ -1,11 +0,0 @@
|
|||
#include <windows.h>
|
||||
|
||||
#include <ntverp.h>
|
||||
|
||||
#define VER_FILETYPE VFT_DRV
|
||||
#define VER_FILESUBTYPE VFT2_DRV_SYSTEM
|
||||
#define VER_FILEDESCRIPTION_STR "Sample Event Driver"
|
||||
#define VER_INTERNALNAME_STR "event.sys"
|
||||
|
||||
#include "common.ver"
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
#
|
||||
# DO NOT EDIT THIS FILE!!! Edit .\sources. if you want to add a new source
|
||||
# file to this component. This file merely indirects to the real make file
|
||||
# that is shared by all the driver components of the Windows NT DDK
|
||||
#
|
||||
|
||||
!INCLUDE $(NTMAKEENV)\makefile.def
|
|
@ -1,6 +0,0 @@
|
|||
TARGETNAME=event
|
||||
TARGETPATH=$(BASEDIR)\lib
|
||||
TARGETTYPE=DRIVER
|
||||
|
||||
SOURCES=event.c \
|
||||
event.rc
|
Loading…
Reference in a new issue