- 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,
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 BOOL DeviceIo_VWin32(DWORD dwIoControlCode,
@ -105,7 +111,7 @@ static const struct VxDInfo VxDList[] =
{ "VSD", 0x000B, NULL, NULL },
{ "VMD", 0x000C, NULL, NULL },
{ "VKD", 0x000D, NULL, NULL },
{ "VCD", 0x000E, NULL, NULL },
{ "VCD", 0x000E, NULL, DeviceIo_VCD },
{ "VPD", 0x000F, NULL, NULL },
{ "BLOCKDEV", 0x0010, NULL, NULL },
{ "VMCPD", 0x0011, NULL, NULL },
@ -295,7 +301,7 @@ LPCSTR VMM_Service_Name[N_VMM_SERVICE] =
/* PageCommit flags */
#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_WRITEABLE 0x00020000 /* make the pages writeable */
#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.
*
* 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,
LPVOID lpvInBuffer, DWORD cbInBuffer,
@ -384,9 +390,12 @@ BOOL WINAPI DeviceIoControl(HANDLE hDevice, DWORD dwIoControlCode,
}
else
{
/* FIXME: Set appropriate error */
FIXME( "Unimplemented control %ld for VxD device %s\n",
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
@ -685,8 +694,8 @@ static DWORD VxDCall_VMM( DWORD service, CONTEXT86 *context )
ERR("Can't reserve ring 1 memory\n");
return -1;
}
/* FIXME: This has to be handled separately, when we have separate
address-spaces */
/* FIXME: This has to be handled separately for the separate
address-spaces we now have */
if ( page == PR_PRIVATE || page == PR_SHARED ) page = 0;
/* FIXME: Handle flags in some way */
address = (LPVOID )(page * psize);
@ -849,11 +858,11 @@ static DWORD VxDCall_VMM( DWORD service, CONTEXT86 *context )
/***********************************************************************
* DeviceIo_IFSMgr
* 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
* 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
*
* 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