- add handler for VCD VxD ("virtual comm device" ?)

- SetLastError( ERROR_INVALID_FUNCTION ); for unimplemented functions
- spelling fixes
This commit is contained in:
Andreas Mohr 2001-05-24 18:40:26 +00:00 committed by Alexandre Julliard
parent 267d630bd0
commit 3eb3569bd3
1 changed files with 47 additions and 9 deletions

View File

@ -57,6 +57,12 @@ static BOOL DeviceIo_IFSMgr(DWORD dwIoControlCode,
LPDWORD lpcbBytesReturned, LPDWORD lpcbBytesReturned,
LPOVERLAPPED lpOverlapped); LPOVERLAPPED lpOverlapped);
static BOOL DeviceIo_VCD(DWORD dwIoControlCode,
LPVOID lpvInBuffer, DWORD cbInBuffer,
LPVOID lpvOutBuffer, DWORD cbOutBuffer,
LPDWORD lpcbBytesReturned,
LPOVERLAPPED lpOverlapped);
static DWORD VxDCall_VWin32( DWORD service, CONTEXT86 *context ); static DWORD VxDCall_VWin32( DWORD service, CONTEXT86 *context );
static BOOL DeviceIo_VWin32(DWORD dwIoControlCode, static BOOL DeviceIo_VWin32(DWORD dwIoControlCode,
@ -105,7 +111,7 @@ static const struct VxDInfo VxDList[] =
{ "VSD", 0x000B, NULL, NULL }, { "VSD", 0x000B, NULL, NULL },
{ "VMD", 0x000C, NULL, NULL }, { "VMD", 0x000C, NULL, NULL },
{ "VKD", 0x000D, NULL, NULL }, { "VKD", 0x000D, NULL, NULL },
{ "VCD", 0x000E, NULL, NULL }, { "VCD", 0x000E, NULL, DeviceIo_VCD },
{ "VPD", 0x000F, NULL, NULL }, { "VPD", 0x000F, NULL, NULL },
{ "BLOCKDEV", 0x0010, NULL, NULL }, { "BLOCKDEV", 0x0010, NULL, NULL },
{ "VMCPD", 0x0011, NULL, NULL }, { "VMCPD", 0x0011, NULL, NULL },
@ -295,7 +301,7 @@ LPCSTR VMM_Service_Name[N_VMM_SERVICE] =
/* PageCommit flags */ /* PageCommit flags */
#define PC_FIXED 0x00000008 /* pages are permanently locked */ #define PC_FIXED 0x00000008 /* pages are permanently locked */
#define PC_LOCKED 0x00000080 /* pages are made present and locked*/ #define PC_LOCKED 0x00000080 /* pages are made present and locked */
#define PC_LOCKEDIFDP 0x00000100 /* pages are locked if swap via DOS */ #define PC_LOCKEDIFDP 0x00000100 /* pages are locked if swap via DOS */
#define PC_WRITEABLE 0x00020000 /* make the pages writeable */ #define PC_WRITEABLE 0x00020000 /* make the pages writeable */
#define PC_USER 0x00040000 /* make the pages ring 3 accessible */ #define PC_USER 0x00040000 /* make the pages ring 3 accessible */
@ -352,7 +358,7 @@ static const struct VxDInfo *DEVICE_GetInfo( HANDLE handle )
* used for VxD communication. * used for VxD communication.
* *
* A return value of FALSE indicates that something has gone wrong which * A return value of FALSE indicates that something has gone wrong which
* GetLastError can decypher. * GetLastError can decipher.
*/ */
BOOL WINAPI DeviceIoControl(HANDLE hDevice, DWORD dwIoControlCode, BOOL WINAPI DeviceIoControl(HANDLE hDevice, DWORD dwIoControlCode,
LPVOID lpvInBuffer, DWORD cbInBuffer, LPVOID lpvInBuffer, DWORD cbInBuffer,
@ -384,9 +390,12 @@ BOOL WINAPI DeviceIoControl(HANDLE hDevice, DWORD dwIoControlCode,
} }
else else
{ {
/* FIXME: Set appropriate error */
FIXME( "Unimplemented control %ld for VxD device %s\n", FIXME( "Unimplemented control %ld for VxD device %s\n",
dwIoControlCode, info->name ? info->name : "???" ); dwIoControlCode, info->name ? info->name : "???" );
/* FIXME: this is for invalid calls on W98SE,
* but maybe we should use ERROR_CALL_NOT_IMPLEMENTED
* instead ? */
SetLastError( ERROR_INVALID_FUNCTION );
} }
} }
else else
@ -685,8 +694,8 @@ static DWORD VxDCall_VMM( DWORD service, CONTEXT86 *context )
ERR("Can't reserve ring 1 memory\n"); ERR("Can't reserve ring 1 memory\n");
return -1; return -1;
} }
/* FIXME: This has to be handled separately, when we have separate /* FIXME: This has to be handled separately for the separate
address-spaces */ address-spaces we now have */
if ( page == PR_PRIVATE || page == PR_SHARED ) page = 0; if ( page == PR_PRIVATE || page == PR_SHARED ) page = 0;
/* FIXME: Handle flags in some way */ /* FIXME: Handle flags in some way */
address = (LPVOID )(page * psize); address = (LPVOID )(page * psize);
@ -849,11 +858,11 @@ static DWORD VxDCall_VMM( DWORD service, CONTEXT86 *context )
/*********************************************************************** /***********************************************************************
* DeviceIo_IFSMgr * DeviceIo_IFSMgr
* NOTES * NOTES
* The ioctls is used by 'MSNET32.DLL'. * These ioctls are used by 'MSNET32.DLL'.
* *
* I have been unable to uncover any documentation about the ioctls so * I have been unable to uncover any documentation about the ioctls so
* the implementation of the cases IFS_IOCTL_21 and IFS_IOCTL_2F are * the implementation of the cases IFS_IOCTL_21 and IFS_IOCTL_2F are
* based on a resonable guesses on information found in the Windows 95 DDK. * based on reasonable guesses on information found in the Windows 95 DDK.
* *
*/ */
@ -983,7 +992,7 @@ static BOOL DeviceIo_IFSMgr(DWORD dwIoControlCode, LPVOID lpvInBuffer, DWORD cbI
* VxDCall_VWin32 * VxDCall_VWin32
* *
* Service numbers taken from page 448 of Pietrek's "Windows 95 System * Service numbers taken from page 448 of Pietrek's "Windows 95 System
* Progrmaming Secrets". Parameters from experimentation on real Win98. * Programming Secrets". Parameters from experimentation on real Win98.
* *
*/ */
@ -1044,6 +1053,35 @@ static DWORD VxDCall_VWin32( DWORD service, CONTEXT86 *context )
} }
/***********************************************************************
* DeviceIo_VCD
*/
static BOOL DeviceIo_VCD(DWORD dwIoControlCode,
LPVOID lpvInBuffer, DWORD cbInBuffer,
LPVOID lpvOutBuffer, DWORD cbOutBuffer,
LPDWORD lpcbBytesReturned,
LPOVERLAPPED lpOverlapped)
{
BOOL retv = TRUE;
switch (dwIoControlCode)
{
case IOCTL_SERIAL_LSRMST_INSERT:
{
FIXME( "IOCTL_SERIAL_LSRMST_INSERT NIY !\n");
retv = FALSE;
}
break;
default:
FIXME( "Unknown Control %ld\n", dwIoControlCode);
retv = FALSE;
break;
}
return retv;
}
/*********************************************************************** /***********************************************************************
* DeviceIo_VWin32 * DeviceIo_VWin32