211{
215
217
218
221
222
224 {
225
226 case 0x00:
227 {
228
230 break;
231 }
232
233
234 case 0x01:
235 {
236 DPRINT(
"INT 21h, AH = 01h\n");
237
240
242 break;
243 }
244
245
246 case 0x02:
247 {
248
251
252
253
254
255
256
257
258
259 setAL(Character ==
'\t' ?
' ' : Character);
260 break;
261 }
262
263
264 case 0x03:
265 {
266
267 DPRINT1(
"INT 16h, 03h: Read character from STDAUX is HALFPLEMENTED\n");
268
269 break;
270 }
271
272
273 case 0x04:
274 {
275
276 DPRINT1(
"INT 16h, 04h: Write character to STDAUX is HALFPLEMENTED\n");
277
278 break;
279 }
280
281
282 case 0x05:
283 {
284
285 DPRINT1(
"INT 16h, 05h: Write character to printer is HALFPLEMENTED -\n\n");
287 DPRINT1(
"\n\n-----------\n\n");
288 break;
289 }
290
291
292 case 0x06:
293 {
295
296
297
298 if (Character != 0xFF)
299 {
300
302
303
304
305
306
307
309 }
310 else
311 {
312
314 {
317 }
318 else
319 {
320
323 }
324 }
325
326 break;
327 }
328
329
330 case 0x07:
331 {
332 DPRINT(
"Direct char input without echo\n");
334 break;
335 }
336
337
338 case 0x08:
339 {
340 DPRINT(
"Char input without echo\n");
341
344
346 break;
347 }
348
349
350 case 0x09:
351 {
353
355 {
358 }
359
360
361
362
363
364
366 break;
367 }
368
369
370 case 0x0A:
371 {
373
374 DPRINT(
"Read Buffered Input\n");
376
377
382 );
383
384 break;
385 }
386
387
388 case 0x0B:
389 {
391 break;
392 }
393
394
395 case 0x0C:
396 {
398
399
401
402
403
404
405
406
407 if (InputFunction == 0x01 || InputFunction == 0x06 ||
408 InputFunction == 0x07 || InputFunction == 0x08 ||
409 InputFunction == 0x0A)
410 {
411
412 setAH(InputFunction);
414 }
415 break;
416 }
417
418
419 case 0x0D:
420 {
422
423
424 DPRINT1(
"INT 21h, 0Dh is UNIMPLEMENTED\n");
425
426
429
430 break;
431 }
432
433
434 case 0x0E:
435 {
438 break;
439 }
440
441
442 case 0x18:
443 {
444
445
446
447
448
449
450
451
452
454 break;
455 }
456
457
458 case 0x19:
459 {
461 break;
462 }
463
464
465 case 0x1A:
466 {
468 break;
469 }
470
471
472 case 0x1D:
473 case 0x1E:
474 {
475
476
477
478
479
480
481
482
483
484
485
486
488 break;
489 }
490
491
492 case 0x20:
493 {
494
495
496
497
498
499
500
501
502
504 break;
505 }
506
507
508 case 0x25:
509 {
511 DPRINT1(
"Setting interrupt 0x%02X to %04X:%04X ...\n",
513
514
516 break;
517 }
518
519
520 case 0x26:
521 {
522
524 break;
525 }
526
527
528 case 0x29:
529 {
535
537 {
538
540
541
543 }
544 else
545 {
546
548 else Fcb->DriveNumber = 0;
549 }
550
551
554 {
557 {
558 FillChar = '?';
559 break;
560 }
561
563 }
564
565
566 if ((FillChar !=
' ') || (
i != 0) || !(
Options & (1 << 2)))
567 {
568 for (;
i < 8;
i++)
Fcb->FileName[
i] = FillChar;
569 }
570
571
574
575
577 FillChar = ' ';
578
580 {
582 {
583 FillChar = '?';
584 break;
585 }
586
588 }
589
590
591 if ((FillChar !=
' ') || (
i != 0) || !(
Options & (1 << 3)))
592 {
593 for (;
i < 3;
i++)
Fcb->FileExt[
i] = FillChar;
594 }
595
596 break;
597 }
598
599
600 case 0x2A:
601 {
606 break;
607 }
608
609
610 case 0x2B:
611 {
616
617
619 break;
620 }
621
622
623 case 0x2C:
624 {
628 break;
629 }
630
631
632 case 0x2D:
633 {
639
640
642 break;
643 }
644
645
646 case 0x2F:
647 {
650 break;
651 }
652
653
654 case 0x30:
655 {
657
658
659
660
661
662
663
665 {
666
667
668
669
670
671
673 }
674
676 {
677
678
679
680
681
683 }
684
685
688
689
690
691
692
694
695 break;
696 }
697
698
699 case 0x31:
700 {
701 DPRINT1(
"Process going resident: %u paragraphs kept\n",
getDX());
703 break;
704 }
705
706
707 case 0x33:
708 {
710 {
711
712
713
714 case 0x05:
715 {
717 break;
718 }
719
720
721
722
723
724
725
726
727 case 0x06:
728 {
729
730
731
732
734
735
737
738
740
741 break;
742 }
743
744 default:
745 {
746 DPRINT1(
"INT 21h, AH = %02Xh, subfunction AL = %02Xh NOT IMPLEMENTED\n",
748 }
749 }
750
751 break;
752 }
753
754
755 case 0x34:
756 {
759 break;
760 }
761
762
763 case 0x35:
764 {
766
767
770 break;
771 }
772
773
774 case 0x36:
775 {
776 CHAR RootPath[] =
"?:\\";
777 DWORD SectorsPerCluster;
778 DWORD BytesPerSector;
779 DWORD NumberOfFreeClusters;
780 DWORD TotalNumberOfClusters;
781
784 else
785 RootPath[0] =
'A' +
getDL() - 1;
786
788 &SectorsPerCluster,
789 &BytesPerSector,
790 &NumberOfFreeClusters,
791 &TotalNumberOfClusters))
792 {
795 setBX(
min(NumberOfFreeClusters, 0xFFFF));
796 setDX(
min(TotalNumberOfClusters, 0xFFFF));
797 }
798 else
799 {
800
802 }
803
804 break;
805 }
806
807
808 case 0x37:
809 {
811 {
812
813
814
815
816
817
818
819 case 0x00:
822 break;
823
824
825
826
827
828
829
830 case 0x01:
831
833 break;
834
835
836
837
838
839
840 case 0x02:
841
843 break;
844
845
846
847
848
849
850 case 0x03:
851
853 break;
854
855
856 default:
858 break;
859 }
860
861 break;
862 }
863
864
865 case 0x38:
866 {
869
872
874 {
877 }
878 else
879 {
882 }
883
884 break;
885 }
886
887
888 case 0x39:
889 {
891
893 {
895 }
896 else
897 {
900 }
901
902 break;
903 }
904
905
906 case 0x3A:
907 {
909
911 {
913 }
914 else
915 {
918 }
919
920 break;
921 }
922
923
924 case 0x3B:
925 {
927
929 {
931 }
932 else
933 {
936 }
937
938 break;
939 }
940
941
942 case 0x3C:
943 {
949
951 {
954 }
955 else
956 {
959 }
960
961 break;
962 }
963
964
965 case 0x3D:
966 {
971
972
973
974
975
978 {
980 }
981
983 {
986 }
987 else
988 {
991 }
992
993 break;
994 }
995
996
997 case 0x3E:
998 {
1000 {
1002 }
1003 else
1004 {
1007 }
1008
1009 break;
1010 }
1011
1012
1013 case 0x3F:
1014 {
1017
1019
1024
1026 {
1029 }
1031 {
1034 }
1035
1036 break;
1037 }
1038
1039
1040 case 0x40:
1041 {
1047
1049 {
1052 }
1053 else
1054 {
1057 }
1058
1059 break;
1060 }
1061
1062
1063 case 0x41:
1064 {
1066
1068 {
1070
1071
1072
1073
1075 }
1076 else
1077 {
1080 }
1081
1082 break;
1083 }
1084
1085
1086 case 0x42:
1087 {
1092 &NewLocation);
1093
1095 {
1097
1098
1101 }
1102 else
1103 {
1106 }
1107
1108 break;
1109 }
1110
1111
1112 case 0x43:
1113 {
1116
1117 if (
getAL() == 0x00)
1118 {
1119
1121
1122
1124 {
1127 }
1128 else
1129 {
1130
1133 }
1134 }
1135 else if (
getAL() == 0x01)
1136 {
1137
1139 {
1141 }
1142 else
1143 {
1146 }
1147 }
1148 else
1149 {
1152 }
1153
1154 break;
1155 }
1156
1157
1158 case 0x44:
1159 {
1161
1163 {
1166 }
1167 else
1168 {
1171 }
1172
1173 break;
1174 }
1175
1176
1177 case 0x45:
1178 {
1180
1182 {
1185 }
1186 else
1187 {
1190 }
1191
1192 break;
1193 }
1194
1195
1196 case 0x46:
1197 {
1199 {
1201 }
1202 else
1203 {
1206 }
1207
1208 break;
1209 }
1210
1211
1212 case 0x47:
1213 {
1216
1217
1218 if (DriveNumber == 0)
1219 {
1221 }
1222 else
1223 {
1224
1225 DriveNumber--;
1226 }
1227
1228 if (DriveNumber < SysVars->NumLocalDrives)
1229 {
1230
1231
1232
1233
1237 }
1238 else
1239 {
1242 }
1243
1244 break;
1245 }
1246
1247
1248 case 0x48:
1249 {
1250 WORD MaxAvailable = 0;
1252
1254 {
1257 }
1258 else
1259 {
1262 setBX(MaxAvailable);
1263 }
1264
1265 break;
1266 }
1267
1268
1269 case 0x49:
1270 {
1272 {
1274 }
1275 else
1276 {
1279 }
1280
1281 break;
1282 }
1283
1284
1285 case 0x4A:
1286 {
1288
1290 {
1292 }
1293 else
1294 {
1298 }
1299
1300 break;
1301 }
1302
1303
1304 case 0x4B:
1305 {
1310
1312 {
1314
1316 {
1317
1319 ParamBlock,
1321 }
1322 else
1323 {
1324
1326 ProgramName,
1327 ParamBlock,
1331 }
1332 }
1333 else if (OrgAL == 0x05)
1334 {
1335
1336 DPRINT1(
"Set execution state is UNIMPLEMENTED\n");
1338 }
1339 else
1340 {
1342 }
1343
1345 {
1347 }
1348 else
1349 {
1352 }
1353
1354 break;
1355 }
1356
1357
1358 case 0x4C:
1359 {
1361 break;
1362 }
1363
1364
1365 case 0x4D:
1366 {
1367
1368
1369
1370
1374 break;
1375 }
1376
1377
1378 case 0x4E:
1379 {
1383
1385
1388 else
1390
1391 break;
1392 }
1393
1394
1395 case 0x4F:
1396 {
1398
1400
1403 else
1405
1406 break;
1407 }
1408
1409
1410 case 0x50:
1411 {
1413 break;
1414 }
1415
1416
1417 case 0x51:
1418
1419 case 0x62:
1420 {
1421
1422
1423
1424
1425
1426
1428 break;
1429 }
1430
1431
1432 case 0x52:
1433 {
1434
1435
1436
1437
1438
1439
1440
1443 break;
1444 }
1445
1446
1447 case 0x55:
1448 {
1451 break;
1452 }
1453
1454
1455 case 0x56:
1456 {
1459
1460
1461
1462
1463
1464
1465 if (
MoveFileA(ExistingFileName, NewFileName))
1466 {
1468 }
1469 else
1470 {
1473 }
1474
1475 break;
1476 }
1477
1478
1479 case 0x57:
1480 {
1482 {
1483
1484 case 0x00:
1485 {
1488 WORD FileDate, FileTime;
1489
1491 {
1492
1494
1496 break;
1497 }
1498
1500 {
1501
1503
1505 break;
1506 }
1507
1508
1509
1510
1511
1515 &FileDate, &FileTime))
1516 {
1519 break;
1520 }
1521
1525 break;
1526 }
1527
1528
1529 case 0x01:
1530 {
1535
1537 {
1538
1540
1542 break;
1543 }
1544
1546 {
1547
1549
1551 break;
1552 }
1553
1554
1555
1556
1557
1559 &LastWriteTime) ||
1562 {
1565 break;
1566 }
1567
1569 break;
1570 }
1571
1572 default:
1573 {
1574 DPRINT1(
"INT 21h, AH = %02Xh, subfunction AL = %02Xh NOT IMPLEMENTED\n",
1576 }
1577 }
1578
1579 break;
1580 }
1581
1582
1583 case 0x58:
1584 {
1586 {
1587
1588 case 0x00:
1589 {
1592 break;
1593 }
1594
1595
1596 case 0x01:
1597 {
1600 {
1601
1604 break;
1605 }
1606
1609 {
1610
1613 break;
1614 }
1615
1618 break;
1619 }
1620
1621
1622 case 0x02:
1623 {
1626 break;
1627 }
1628
1629
1630 case 0x03:
1631 {
1633
1636 else
1638
1641 else
1643
1644 break;
1645 }
1646
1647
1648 default:
1649 {
1652 }
1653 }
1654
1655 break;
1656 }
1657
1658
1659 case 0x59:
1660 {
1661 DPRINT1(
"INT 21h, AH = 59h, BX = %04Xh - Get Extended Error Information is UNIMPLEMENTED\n",
1663 break;
1664 }
1665
1666
1667 case 0x5A:
1668 {
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1686 if (uRetVal == 0)
1687 {
1690 break;
1691 }
1692
1693
1696 {
1699 }
1700 else
1701 {
1704 }
1705
1706 break;
1707 }
1708
1709
1710 case 0x5B:
1711 {
1717
1719 {
1722 }
1723 else
1724 {
1727 }
1728
1729 break;
1730 }
1731
1732
1733 case 0x5C:
1734 {
1735 if (
getAL() == 0x00)
1736 {
1737
1739 {
1741 }
1742 else
1743 {
1746 }
1747 }
1748 else if (
getAL() == 0x01)
1749 {
1750
1752 {
1754 }
1755 else
1756 {
1759 }
1760 }
1761 else
1762 {
1763
1766 }
1767
1768 break;
1769 }
1770
1771
1772 case 0x60:
1773 {
1774
1775
1776
1777
1778
1779
1780
1781
1782
1784 128,
1787 if (dwRetVal == 0)
1788 {
1791 }
1792 else
1793 {
1796 }
1797
1798
1799
1800
1801
1802
1803
1804 break;
1805 }
1806
1807
1808 case 0x5D:
1809 {
1811 {
1812
1813 case 0x06:
1814 {
1819
1821 break;
1822 }
1823
1824 default:
1825 {
1826 DPRINT1(
"INT 21h, AH = %02Xh, subfunction AL = %02Xh NOT IMPLEMENTED\n",
1828 }
1829 }
1830
1831 break;
1832 }
1833
1834
1835 case 0x65:
1836 {
1838 {
1839 case 0x01: case 0x02: case 0x03:
1840 case 0x04: case 0x05: case 0x06:
1841 case 0x07:
1842 {
1851 {
1854 }
1855 else
1856 {
1859 }
1860
1861 break;
1862 }
1863
1864
1865 case 0x20:
1866
1867 case 0xA0:
1868 {
1871
1872 break;
1873 }
1874
1875
1876 case 0x21:
1877
1878 case 0xA1:
1879 {
1881
1884
1885 break;
1886 }
1887
1888
1889 case 0x22:
1890
1891 case 0xA2:
1892 {
1894
1897
1898 break;
1899 }
1900
1901
1902 case 0x23:
1903 {
1906 break;
1907 }
1908
1909 default:
1910 {
1911 DPRINT1(
"INT 21h, AH = %02Xh, subfunction AL = %02Xh NOT IMPLEMENTED\n",
1913 }
1914 }
1915
1916 break;
1917 }
1918
1919
1920 case 0x67:
1921 {
1923 {
1926 }
1928
1929 break;
1930 }
1931
1932
1933 case 0x68:
1934 case 0x6A:
1935 {
1936
1937
1938
1939
1940
1941
1943
1945 {
1947 }
1948 else
1949 {
1952 }
1953
1954 break;
1955 }
1956
1957
1958 case 0x6C:
1959 {
1961 WORD CreationStatus;
1963
1964
1965 if (
getAL() != 0x00)
1966 {
1969 break;
1970 }
1971
1972
1973
1974
1975
1976
1977
1978
1980 &CreationStatus,
1985
1987 {
1989 setCX(CreationStatus);
1991 }
1992 else
1993 {
1996 }
1997
1998 break;
1999 }
2000
2001
2002 case 0x71:
2003 {
2004 DPRINT1(
"INT 21h LFN Support, AH = %02Xh, AL = %02Xh NOT IMPLEMENTED!\n",
2006
2009 break;
2010 }
2011
2012
2013 default:
2014 {
2015 DPRINT1(
"DOS Function INT 21h, AH = %02Xh, AL = %02Xh NOT IMPLEMENTED!\n",
2017
2020 }
2021 }
2022
2024}
WORD DosIfCharYesNo(WORD Char)
VOID DosToUpperStrZ(PSTR DestStr, PSTR SrcStr)
WORD DosGetCountryInfoEx(IN BYTE InfoId, IN WORD CodePage, IN WORD CountryId, OUT PDOS_COUNTRY_INFO_2 CountryInfo, IN OUT PWORD BufferSize)
WORD DosGetCountryInfo(IN OUT PWORD CountryId, OUT PDOS_COUNTRY_INFO CountryInfo)
CHAR DosToUpper(CHAR Char)
VOID DosToUpperStrN(PCHAR DestStr, PCHAR SrcStr, WORD Length)
#define ERROR_INVALID_FUNCTION
DWORD WINAPI demFileFindFirst(_Out_ PVOID pFindFileData, _In_ PCSTR FileName, _In_ WORD AttribMask)
DWORD WINAPI demFileFindNext(_Inout_ PVOID pFindFileData)
DWORD WINAPI demFileDelete(IN LPCSTR FileName)
#define ERROR_CALL_NOT_IMPLEMENTED
#define ERROR_INVALID_PARAMETER
#define ERROR_INVALID_HANDLE
#define ERROR_ACCESS_DENIED
BOOL WINAPI RemoveDirectoryA(IN LPCSTR lpPathName)
BOOL WINAPI CreateDirectoryA(IN LPCSTR lpPathName, IN LPSECURITY_ATTRIBUTES lpSecurityAttributes)
BOOL WINAPI GetDiskFreeSpaceA(IN LPCSTR lpRootPathName, OUT LPDWORD lpSectorsPerCluster, OUT LPDWORD lpBytesPerSector, OUT LPDWORD lpNumberOfFreeClusters, OUT LPDWORD lpTotalNumberOfClusters)
BOOL WINAPI SetFileAttributesA(LPCSTR lpFileName, DWORD dwFileAttributes)
BOOL WINAPI SetFileTime(IN HANDLE hFile, CONST FILETIME *lpCreationTime OPTIONAL, CONST FILETIME *lpLastAccessTime OPTIONAL, CONST FILETIME *lpLastWriteTime OPTIONAL)
BOOL WINAPI GetFileTime(IN HANDLE hFile, OUT LPFILETIME lpCreationTime OPTIONAL, OUT LPFILETIME lpLastAccessTime OPTIONAL, OUT LPFILETIME lpLastWriteTime OPTIONAL)
BOOL WINAPI MoveFileA(IN LPCSTR lpExistingFileName, IN LPCSTR lpNewFileName)
DWORD WINAPI GetFullPathNameA(IN LPCSTR lpFileName, IN DWORD nBufferLength, OUT LPSTR lpBuffer, OUT LPSTR *lpFilePart)
BOOL WINAPI SetLocalTime(IN CONST SYSTEMTIME *lpSystemTime)
BOOL WINAPI DosDateTimeToFileTime(IN WORD wFatDate, IN WORD wFatTime, OUT LPFILETIME lpFileTime)
VOID WINAPI GetLocalTime(OUT LPSYSTEMTIME lpSystemTime)
BOOL WINAPI FileTimeToDosDateTime(IN CONST FILETIME *lpFileTime, OUT LPWORD lpFatDate, OUT LPWORD lpFatTime)
BOOLEAN DosControlBreak(VOID)
static BOOLEAN DosIsFileOnCdRom(VOID)
static BOOLEAN DosChangeDirectory(LPSTR Directory)
VOID WINAPI DosInt21h(LPWORD Stack)
static BOOLEAN DosChangeDrive(BYTE Drive)
WORD DosReadFile(WORD FileHandle, DWORD Buffer, WORD Count, LPWORD BytesRead)
PDOS_FILE_DESCRIPTOR DosGetHandleFileDescriptor(WORD DosHandle)
WORD DosOpenFile(LPWORD Handle, LPCSTR FilePath, BYTE AccessShareModes)
WORD DosCreateFileEx(LPWORD Handle, LPWORD CreationStatus, LPCSTR FilePath, BYTE AccessShareModes, WORD CreateActionFlags, WORD Attributes)
WORD DosCreateFile(LPWORD Handle, LPCSTR FilePath, DWORD CreationDisposition, WORD Attributes)
BYTE DosReadLineBuffered(WORD FileHandle, DWORD Buffer, BYTE MaxSize)
BOOLEAN DosUnlockFile(WORD DosHandle, DWORD Offset, DWORD Size)
BOOL DosFlushFileBuffers(WORD FileHandle)
WORD DosSeekFile(WORD FileHandle, LONG Offset, BYTE Origin, LPDWORD NewOffset)
BOOLEAN DosLockFile(WORD DosHandle, DWORD Offset, DWORD Size)
WORD DosWriteFile(WORD FileHandle, DWORD Buffer, WORD Count, LPWORD BytesWritten)
BOOLEAN DosDeviceIoControl(WORD FileHandle, BYTE ControlCode, DWORD Buffer, PWORD Length)
#define SEG_OFF_TO_PTR(seg, off)
UINT WINAPI GetTempFileNameA(IN LPCSTR lpPathName, IN LPCSTR lpPrefixString, IN UINT uUnique, OUT LPSTR lpTempFileName)
_Must_inspect_result_ _In_opt_ PFLT_INSTANCE _Out_ PHANDLE FileHandle
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
_In_ NDIS_ERROR_CODE ErrorCode
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID * BaseAddress
_In_ ULONG _In_ ULONG _In_ ULONG Length
CHAR DosReadCharacter(WORD FileHandle, BOOLEAN Echo)
BOOLEAN DosCheckInput(VOID)
#define INVALID_DOS_HANDLE
struct _DOS_FCB * PDOS_FCB
#define DOS_DATA_OFFSET(x)
struct _DOS_INPUT_BUFFER * PDOS_INPUT_BUFFER
WORD DosDuplicateHandle(WORD DosHandle)
BOOLEAN DosCloseHandle(WORD DosHandle)
BOOLEAN DosResizeHandleTable(WORD NewSize)
BOOLEAN DosForceDuplicateHandle(WORD OldHandle, WORD NewHandle)
BOOLEAN DosResizeMemory(WORD BlockData, WORD NewSize, WORD *MaxAvailable)
WORD DosAllocateMemory(WORD Size, WORD *MaxAvailable)
BOOLEAN DosUnlinkUmb(VOID)
BOOLEAN DosFreeMemory(WORD BlockData)
#define DOS_ALLOC_HIGH_LOW
VOID DosClonePsp(WORD DestSegment, WORD SourceSegment)
VOID DosCreatePsp(WORD Segment, WORD ProgramSize)
DWORD DosLoadExecutable(IN DOS_EXEC_TYPE LoadType, IN LPCSTR ExecutablePath, IN PDOS_EXEC_PARAM_BLOCK Parameters, IN LPCSTR CommandLine OPTIONAL, IN LPCSTR Environment OPTIONAL, IN DWORD ReturnAddress OPTIONAL)
WORD DosCreateProcess(IN LPCSTR ProgramName, IN PDOS_EXEC_PARAM_BLOCK Parameters, IN DWORD ReturnAddress OPTIONAL)
VOID DosSetProcessContext(WORD Segment)
#define SEGMENT_TO_PSP(seg)
#define FIELD_OFFSET(t, f)
VOID WINAPI setCX(USHORT)
VOID WINAPI setDX(USHORT)
USHORT WINAPI getDS(VOID)
USHORT WINAPI getCX(VOID)
USHORT WINAPI getSI(VOID)
USHORT WINAPI getDX(VOID)
VOID WINAPI setDS(USHORT)
USHORT WINAPI getES(VOID)
USHORT WINAPI getDI(VOID)
VOID WINAPI setES(USHORT)
VOID WINAPI setSI(USHORT)
USHORT WINAPI getSS(VOID)
_In_ PWDFDEVICE_INIT _In_ PWDF_REMOVE_LOCK_OPTIONS Options
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFSTRING String
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR _In_opt_ PLONGLONG _In_opt_ PWDF_REQUEST_SEND_OPTIONS _Out_opt_ PULONG_PTR BytesWritten
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR _In_opt_ PLONGLONG _In_opt_ PWDF_REQUEST_SEND_OPTIONS _Out_opt_ PULONG_PTR BytesRead
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR InputBuffer
_In_ WDFMEMORY _Out_opt_ size_t * BufferSize
_Must_inspect_result_ _In_ WDFIORESLIST _In_ PIO_RESOURCE_DESCRIPTOR Descriptor
#define ERROR_INVALID_DRIVE
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO