Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

248 lines
4.1 KiB

/*++
*
* VDD v1.0
*
* Copyright (c) 1991, Microsoft Corporation
*
* VDD.C - Sample VDD for NT-MVDM
*
--*/
#include "fax32.h"
#include "vddsvc.h"
USHORT Sub16CS;
USHORT Sub16IP;
BOOL
VDDInitialize(
IN PVOID DllHandle,
IN ULONG Reason,
IN PCONTEXT Context OPTIONAL
)
/*++
Routine Description:
Arguments:
DllHandle - Not Used
Reason - Attach or Detach
Context - Not Used
Return Value:
SUCCESS - TRUE
FAILURE - FALSE
--*/
{
switch ( Reason ) {
case DLL_PROCESS_ATTACH:
// Allocate VDD's local heap if needed. Check that NT FAX driver
// is available by opening that device.
//....
// Install user hook for callback service.
if(!VDDInstallUserHook (DllHandle,&FAXVDDCreate, &FAXVDDTerminate,
&FAXVDDBlock, &FAXVDDResume))
OutputDebugString("FAX32: UserHook not installed\n");
else
OutputDebugString("FAX32: UserHook installed!\n");
// UserHook # 2
if(!VDDInstallUserHook (DllHandle,&FAXVDDCreate, NULL,
NULL, &FAXVDDResume))
OutputDebugString("FAX32: UserHook #2 not installed\n");
else
OutputDebugString("FAX32: UserHook #2 installed!\n");
break;
case DLL_PROCESS_DETACH:
// Deallocate VDD's local heap if needed
// communicate to appropriate Device driver about your departure
//...
// Deinstall user hook for callback service.
if(!VDDDeInstallUserHook (DllHandle))
OutputDebugString("FAX32: UserHook not deinstalled\n");
else
OutputDebugString("FAX32: UserHook deinstalled!\n");
break;
default:
break;
}
return TRUE;
}
// Sample function
VOID FAXVDDTerminate(USHORT usPDB)
{
USHORT uSaveCS, uSaveIP;
OutputDebugString("FAX32: Terminate message\n");
// VDDHostSimulate
uSaveCS = getCS();
uSaveIP = getIP();
setCS(Sub16CS);
setIP(Sub16IP);
VDDSimulate16();
setCS(uSaveCS);
setIP(uSaveIP);
}
// Sample function
VOID FAXVDDCreate(USHORT usPDB)
{
OutputDebugString("FAX32: Create Message\n");
}
// Sample function
VOID FAXVDDBlock(VOID)
{
OutputDebugString("FAX32: Block Message\n");
}
// Sample function
VOID FAXVDDResume(VOID)
{
OutputDebugString("FAX32: Resume Message\n");
}
VOID
FAXVDDTerminateVDM(
VOID
)
/*++
Arguments:
Return Value:
SUCCESS - TRUE
FAILURE - FALSE
--*/
{
// Cleanup any resource taken for this vdm
return;
}
VOID
FAXVDDRegisterInit(
VOID
)
/*++
Arguments:
Return Value:
SUCCESS - TRUE
FAILURE - FALSE
--*/
{
// Save addresses for fax16
Sub16CS = getDS();
Sub16IP = getAX();
OutputDebugString("FAX32: GET_ADD\n");
// Called from the BOP manager. If VDDInitialize has done all the
// checking and resources alloaction, just return success.
setCF(0);
return;
}
#define GET_A_FAX 1
#define SEND_A_FAX 2
VOID
FAXVDDDispatch(
VOID
)
/*++
Arguments:
Client (DX) = Command code
01 - get a message from NT device driver
02 - send a message through NT device driver
03 - address of 16 bit routine
Client (ES:BX) = Message Buffer
Client (CX) = Buffer Size
Return Value:
SUCCESS - Client Carry Clear and CX has the count transferred
FAILURE - Client Carry Set
--*/
{
PCHAR Buffer;
USHORT cb;
USHORT uCom;
BOOL Success = TRUE; // In this sample operation always succeeds
uCom = getDX();
cb = getCX();
Buffer = (PCHAR) GetVDMPointer ((ULONG)((getES() << 16)|getBX()),cb,FALSE);
switch (uCom) {
case GET_A_FAX:
// Make a DeviceIOControl or ReadFile on NT FAX driver with
// cb and Buffer.Then set CX if success.
if (Success) {
setCX(cb);
setCF(0);
}
else
setCF(1);
break;
case SEND_A_FAX:
// Make a DeviceIOControl or WriteFile on NT FAX driver with
// cb and Buffer.Then set CX if success.
if (Success) {
setCX(cb);
setCF(0);
}
else
setCF(1);
break;
default:
setCF(1);
}
return;
}