Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-cw
Commits
796c0f12
Commit
796c0f12
authored
Nov 12, 1999
by
Ian Schmidt
Committed by
Alexandre Julliard
Nov 12, 1999
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Implemented VWin32 VxDCall mechanism and 2 calls.
parent
857e0549
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
64 additions
and
1 deletion
+64
-1
device.c
win32/device.c
+64
-1
No files found.
win32/device.c
View file @
796c0f12
...
...
@@ -25,6 +25,7 @@
#include "winbase.h"
#include "winreg.h"
#include "winerror.h"
#include "winversion.h"
#include "file.h"
#include "process.h"
#include "mmsystem.h"
...
...
@@ -64,6 +65,8 @@ static BOOL DeviceIo_IFSMgr(DWORD dwIoControlCode,
LPDWORD
lpcbBytesReturned
,
LPOVERLAPPED
lpOverlapped
);
static
DWORD
VxDCall_VWin32
(
DWORD
service
,
CONTEXT
*
context
);
static
BOOL
DeviceIo_VWin32
(
DWORD
dwIoControlCode
,
LPVOID
lpvInBuffer
,
DWORD
cbInBuffer
,
LPVOID
lpvOutBuffer
,
DWORD
cbOutBuffer
,
...
...
@@ -132,7 +135,7 @@ static const struct VxDInfo VxDList[] =
{
"VXDLDR"
,
0x0027
,
NULL
,
NULL
},
{
"NDIS"
,
0x0028
,
NULL
,
NULL
},
{
"BIOS_EXT"
,
0x0029
,
NULL
,
NULL
},
{
"VWIN32"
,
0x002A
,
NULL
,
DeviceIo_VWin32
},
{
"VWIN32"
,
0x002A
,
VxDCall_VWin32
,
DeviceIo_VWin32
},
{
"VCOMM"
,
0x002B
,
NULL
,
NULL
},
{
"SPOOLER"
,
0x002C
,
NULL
,
NULL
},
{
"WIN32S"
,
0x002D
,
NULL
,
NULL
},
...
...
@@ -783,6 +786,66 @@ static BOOL DeviceIo_IFSMgr(DWORD dwIoControlCode, LPVOID lpvInBuffer, DWORD cbI
return
retv
;
}
/********************************************************************************
* VxDCall_VWin32
*
* Service numbers taken from page 448 of Pietrek's "Windows 95 System
* Progrmaming Secrets". Parameters from experimentation on real Win98.
*
*/
static
DWORD
VxDCall_VWin32
(
DWORD
service
,
CONTEXT
*
context
)
{
switch
(
LOWORD
(
service
)
)
{
case
0x0000
:
/* GetVersion */
{
DWORD
vers
=
VERSION_GetVersion
();
switch
(
vers
)
{
case
WIN31
:
return
(
0x0301
);
/* Windows 3.1 */
break
;
case
WIN95
:
return
(
0x0400
);
/* Win95 aka 4.0 */
break
;
case
WIN98
:
return
(
0x040a
);
/* Win98 aka 4.10 */
break
;
case
NT351
:
case
NT40
:
ERR
(
"VxDCall when emulating NT???
\n
"
);
break
;
default:
WARN
(
"Unknown version %lx
\n
"
,
vers
);
break
;
}
return
(
0x040a
);
/* default to win98 */
}
break
;
case
0x002a
:
/* Int41 dispatch - parm = int41 service number */
{
DWORD
callnum
=
(
DWORD
)
stack32_pop
(
context
);
return
callnum
;
/* FIXME: should really call INT_Int41Handler() */
}
break
;
default:
FIXME
(
"Unknown VWin32 service %08lx
\n
"
,
service
);
break
;
}
return
0xffffffff
;
}
/***********************************************************************
* DeviceIo_VWin32
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment