-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathhaspintl.h
128 lines (120 loc) · 7.81 KB
/
haspintl.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#pragma once
/*
Table 1|
-------┘
╔════════════════════Ð════════════════════Ð══════════════════════════════════╗
║ SERVICE │ CALL │ RETURN ║
║ BH=FUNC, BL=PORT │ │ ║
╠════════════════════Ï════════════════════Ï══════════════════════════════════╣
║1. │ │ AX : 0 - HASP NOT FOUND ║
║ ISHASP │ │ 1 - HASP FOUND ║
Ã────────────────────┼────────────────────┼──────────────────────────────────Â
║2. │ AX=SEEDCODE │ AX : 1ST RETURN CODE ║
║ HASPCODE │ CX=PASSWORD 1 │ BX : 2ND RETURN CODE ║
║ │ DX=PASSWORD 2 │ CX : 3RD RETURN CODE ║
║ │ │ DX : 4TH RETURN CODE ║
Ã────────────────────┼────────────────────┼──────────────────────────────────Â
║3. │ CX=PASSWORD 1 │ BX : DATA ║
║ READMEMO │ DX=PASSWORD 2 │ CX : STATUS ║
║ │ DI=MEMORY ADDR. │ (READ 1 byte at DI) ║
Ã────────────────────┼────────────────────┼──────────────────────────────────Â
║4. │ CX=PASSWORD 1 │ CX : STATUS ║
║ WRITEMEMO │ DX=PASSWORD 2 │ ║
║ │ DI=MEMORY ADDR. │ ║
║ │ SI=MEMORY DATA. │ ║
Ã────────────────────┼────────────────────┼──────────────────────────────────Â
║5. │ CX=PASSWORD 1 │ AX : MEMORY SIZE ║
║ HASPSTATUS │ DX=PASSWORD 2 │ BX : HASP TYPE ║
║ │ │ CX : ACTUAL LPT_NUM ║
Ã────────────────────┼────────────────────┼──────────────────────────────────Â
║6. │ CX=PASSWORD 1 │ AX : IDLOW ║
║ HASPID │ DX=PASSWORD 2 │ BX : IDHIGH ║
║ │ │ CX : STATUS ║
Ã────────────────────┼────────────────────┼──────────────────────────────────Â
║32h. │ CX=PASSWORD 1 │ CX : STATUS ║
║ READBLOCK │ DX=PASSWORD 2 │ ║
║ │ DI=MEM.START ADDR.│ ║
║ │ SI=BLOCK LENGTH │ ║
║ │ ES=BUFER SEG. │ ║
║ │ AX=BUFER OFFS. │ ║
Ã────────────────────┼────────────────────┼──────────────────────────────────Â
║33h. │ CX=PASSWORD 1 │ CX : STATUS ║
║ WRITEBLOCK │ DX=PASSWORD 2 │ ║
║ │ DI=MEM.START ADDR.│ ║
║ │ SI=BLOCK LENGTH │ ║
║ │ ES=BUFER SEG. │ ║
║ │ AX=BUFER OFFS. │ ║
╚════════════════════════════════════════════════════════════════════════════╝
Table 2|
-------┘
╔════════════════════════════════════════════════════════════════════════════╗
║ Port_Num ║
╠═══════════Ð═════════Ð══════════Ð══════════Ð══════════Ð══════════Ð══════════╣
║ 0 │ 1 │ 2 │ 3 │ 101 │ 102 │ 103 ║
Ã───────────┼─────────┼──────────┼──────────┼──────────┼──────────┼──────────Â
║ all ports │ LPT1 │ LPT2 │ LPT3 │ 3BCh │ 378h │ 278h ║
╚═══════════¤═════════¤══════════¤══════════¤══════════¤══════════¤══════════╝
*/
/* As VDDs are always 32bit (as NTVDM is), it makes no sense to compile it
* 64bit. However, on 64bit, we interact with the 64bit HARDLOCK.SYS driver,
* so the structures need to be adjusted for it
*/
#ifdef W64_BUILD
#define ULONG_PTR unsigned __int64
#endif
#pragma warning(push)
#pragma warning(disable:4201)
#pragma pack(1)
typedef struct { // Str DOS HLBuf
USHORT Service; // 00 04 20
USHORT Service2; // 02 06 22
union {
DWORD Param1; // 04 08 24 (On input: HIBYTE() = 1 = ProtectedMode enabled?)
DWORD AX_Ret;
};
union {
DWORD Param2; // 08 12 28
DWORD BX;
};
union {
DWORD Param3; // 12 16 32
DWORD CX;
};
union {
DWORD Param4; // 16 20 36
DWORD DX;
};
union {
DWORD Param1Ret; // 20 24 40
DWORD DI;
};
union {
DWORD Param2Ret; // 24 28 44
DWORD SI;
};
union {
DWORD Param3Ret; // 28 32 48
DWORD ES;
};
union {
DWORD Param4Ret; // 32 36 52
DWORD AX;
};
} HaspDOSBufferStruc; // 36 40 56
typedef struct {
DWORD Ticks; // 00 ??
HaspDOSBufferStruc DOSBuffer;
} HaspBufferInStruc; // 0x28
typedef struct { // 32 64 bit
DWORD Code1; // 0
DWORD Code2; // 4
DWORD Code3; // 8
DWORD PacketLength; // 12
DWORD InBufferLength; // 16
HaspDOSBufferStruc DOSBuffer; // 20
DWORD Padding; // 56 Overflow area for DOSBuffer (sizeof(Ticks))
DWORD BlockLength; // 60
ULONG_PTR BufferOffset; // 64 64
ULONG_PTR BufferSegment; // 68 72
} HaspWinBufferStruc; // 72 80
#pragma pack()