Product / Locale |
Workstation [i386] |
Server [i386] |
Chinese (Traditional) CHT |
+ |
+? |
Danish DAN |
+ |
- |
Dutch NLD |
+ |
+? |
English ENU |
+ |
+ |
Finnish FIN |
+ |
- |
French FRN |
+ |
+? |
German DEU |
+ |
+? |
Italian ITA |
+ |
- |
Japanese JPN |
+ |
+? |
Korean KOR |
+ |
+? |
Norwegian NOR |
+ |
- |
Portuguese (Brazilian) BRA |
+ |
- |
Spanish SPA |
+ |
+? |
Swedish SVE |
+ |
+ |
AST Manhattan SMP Compaq SystemPro Multiprocessor or 100% Compatible Corollary C-bus Architecture IBM PS/2 or other Micro Channel-based PC MPS Multiprocessor PC MPS Uniprocessor PC NCR System 3000 Model 3360/3450/3550 Olivetti LSX5030/40 Standard PC Standard PC with C-Step i486 Wyse Series 7000i Model 740MP/760MP Other
Digital Alpha XL Family Digital AlphaPC64 Digital AlphaServer 1000 Family Uniprocessor Digital AlphaServer 2x00 4/xxx Family Digital AlphaServer 2x00 5/xxx Family Digital AlphaStation 200/400 Family Digital AlphaStation 600 Family Digital AXPpci 33 Digital DECpc AXP 150 Digital Multia MultiClient Desktop *** COMPAQ: Windows NT for Alpha Systems Platform Support *** Alpha XL 433 AlphaServer 400 AlphaServer 800 AlphaServer 8200/8400 AlphaStation 1200 AlphaStation 600A Compaq Professional Workstation XP1000 Compaq AlphaPC Compaq AlphaServer DS20 DEC PC PowerGrade DECpc 2000-500 DIGITAL Personal Workstation DIGITAL Server 3300/3305 DIGITAL Server 5300/5305 DIGITAL Server 7300/7305 DIGITAL Ultimate Workstation 533au2
DeskStation Technology Evolution RISC PC DeskStation Technology Tyne RISC PC MIPS R4000/R4400-based MIPS R4000/R4400-based (PICA Chipset) MIPS R4400-based Multiprocessor MIPS R4600-based NEC MIPS R4400-based Multiprocessor NEC R98 MIPS R4400-based Multiprocessor NeTpower FASTseries (Multiprocessor) NeTpower FASTseries (Uniprocessor) Siemens Nixdorf RM200/RM400-MT/RM400-T Siemens Nixdorf RM400-T Multiprocessor
FirePower - Powerized ES FirePower - Powerized MX FirePower - Powerized MX - MP IBM Power Series 6015 IBM Power Series 6020 IBM Power Series 6030 IBM Power Series 6050 and 6070 MOTOROLA Big Bend MOTOROLA PowerStack
Installing Windows NT from CD, HDD or floppies as usual on modern hardware (I mean Pentium4-based and later PCs) it is a difficult task due to installer incompatibility with faster/newer hardware & CPUs. That doesnt mean that Windows NT cannot RUN on such hardware. You CAN install Windows NT in virtialization software (QEMU, VirtualBox, VmWare, VirtualPC, Bochs ...) and then copy intalled OS image on "real" PC harddrive.
[ProcessorVar] STF_PROCESSOR = "" ? $(!LIBHANDLE) GetProcessorafter:
[ProcessorVar] STF_PROCESSOR = $(ProcessorID_I586)
[Shell Commands] ... read-syms UiVars detect UiVars read-syms FreeSpace$(!STF_PLATFORM) ifstr(i) $(STF_PLATFORM) != $(STF_PLATFORMDET)after:
[Shell Commands] ... read-syms UiVars detect UiVars read-syms FreeSpace$(!STF_PLATFORM) set !STF_PLATFORMDET = "I386" ifstr(i) $(STF_PLATFORM) != $(STF_PLATFORMDET)
Hive: [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices]
Key: Z: String Value: \\Device\\Harddisk0\\Partition2
Following codepages included: 437 — The original IBM PC code page 737 - Greek 850 - "Multilingual (Latin-1)" (Western European languages) 852 - "Slavic (Latin-2)" (Eastern European languages) 855 - Cyrillic 857 - Turkish 860 - Portuguese 861 - Icelandic 863 - French Canadian 865 - Nordic 866 - Cyrillic (Russian Default) 869 - Greek
CDROM.W DISK1.W DISK2.W DISK3.W ... DISK50.W DISK51.W
SP5_351I.EXE -D C:\NT3INST\SP5
C:\NT3INST\SP5\WINNT\*.* to C:\NT3INST\SP5 ; updating NT351 Workstation. C:\NT3INST\SP5\NTAS\*.* to C:\NT3INST\SP5 ; updating NT351 Server.
sskit.exe C:\NT3INST\SP5\ C:\NT3INST\I386\ C:\NT3INST\OUT\
[SCSI.Load] viadsk = viadsk.sys,4 ; first line!!! ... [SCSI] ... viadsk = "VIA SATA/PATA Controller" ...Make these changes in C:\NT3INST\SRC\I386\dosnet.inf
[Files] ... d1,viadsk.sys ...
CDIMAGE.EXE -e -h -lNT351SP5 -m -nt -o -pNT351SP5 -y5 -x C:\NT3INST\SRC nt351sp5.isocdimage (or oscdimg) taken from WindowsPE ( xpsp2_2180_usa_x86fre_opk.zip or ensp1opk.zip )
update.exeAnd then - reboot.
Intel Corp. PIIX-PIIX4e - PIIX Bus Master IDE Driver 1.70. VIA Technologies - Via Service Pack.For newer controllers visit UniATA - Universal (E)IDE/(S)ATA driver for Windows NT3/NT4/2000/XP/2003. It supports a wide range of SATA/PATA controllers (see BM_DEVS.H in UniATA sources) but only in these modes: when you set 'AHCI' (experimental since summer 2012), 'Native IDE' or 'Legacy IDE' option in your computer's BIOS. RAIDs are unsupported. In most cases SCSIPORT.SYS fix is REQUIRED, problem described here.
For optical drives (CD, DVD, etc.) I recommend DVDWriteNow or Patch for cdrom.sys (NT4) :
CDROMX driver v.5 (replacement for CDROM.SYS, made by Alter) Release version: cdromx_v5.rar Debug version: cdromx_v5_dbg.rar
Note that regardless of storage driver Windows NT cannot install on a partition larger then 4Gb due to installer limitation since it creates NTFS partition from FAT16 one and FAT16 limit is 4Gb (with 64k clusters). However if we copy installed OS image to a larger partition, NT system will work fine from there.
*** 8086 Intel **** 8086:1029 82559 Ethernet Controller 8086:1229 82557/8/9/0/1 Ethernet Pro 100 0e11 3001 82559 Fast Ethernet LOM with Alert on LAN* 0e11 3002 82559 Fast Ethernet LOM with Alert on LAN* 0e11 3003 82559 Fast Ethernet LOM with Alert on LAN* 0e11 3004 82559 Fast Ethernet LOM with Alert on LAN* 0e11 3005 82559 Fast Ethernet LOM with Alert on LAN* 0e11 3006 82559 Fast Ethernet LOM with Alert on LAN* 0e11 3007 82559 Fast Ethernet LOM with Alert on LAN* 0e11 b01e NC3120 Fast Ethernet NIC 0e11 b01f NC3122 Fast Ethernet NIC (dual port) 0e11 b02f NC1120 Ethernet NIC 0e11 b04a Netelligent 10/100TX NIC with Wake on LAN 0e11 b0c6 NC3161 Fast Ethernet NIC (embedded, WOL) 0e11 b0c7 NC3160 Fast Ethernet NIC (embedded) 0e11 b0d7 NC3121 Fast Ethernet NIC (WOL) 0e11 b0dd NC3131 Fast Ethernet NIC (dual port) 0e11 b0de NC3132 Fast Ethernet Module (dual port) 0e11 b0e1 NC3133 Fast Ethernet Module (100-FX) 0e11 b134 NC3163 Fast Ethernet NIC (embedded, WOL) 0e11 b13c NC3162 Fast Ethernet NIC (embedded) 0e11 b144 NC3123 Fast Ethernet NIC (WOL) 0e11 b163 NC3134 Fast Ethernet NIC (dual port) 0e11 b164 NC3135 Fast Ethernet Upgrade Module (dual port) 0e11 b1a4 NC7131 Gigabit Server Adapter 1014 005c 82558B Ethernet Pro 10/100 1014 01bc 82559 Fast Ethernet LAN On Motherboard 1014 01f1 10/100 Ethernet Server Adapter 1014 01f2 10/100 Ethernet Server Adapter 1014 0207 Ethernet Pro/100 S 1014 0232 10/100 Dual Port Server Adapter 1014 023a ThinkPad R30 1014 105c Netfinity 10/100 1014 2205 ThinkPad A22p 1014 305c 10/100 EtherJet Management Adapter 1014 405c 10/100 EtherJet Adapter with Alert on LAN 1014 505c 10/100 EtherJet Secure Management Adapter 1014 605c 10/100 EtherJet Secure Management Adapter 1014 705c 10/100 Netfinity 10/100 Ethernet Security Adapter 1014 805c 10/100 Netfinity 10/100 Ethernet Security Adapter 1028 009b 10/100 Ethernet Server Adapter 1028 00ce 10/100 Ethernet Server Adapter 1033 8000 PC-9821X-B06 1033 8016 PK-UG-X006 1033 801f PK-UG-X006 1033 8026 PK-UG-X006 1033 8063 82559-based Fast Ethernet Adapter 1033 8064 82559-based Fast Ethernet Adapter 103c 10c0 NetServer 10/100TX 103c 10c3 NetServer 10/100TX 103c 10ca NetServer 10/100TX 103c 10cb NetServer 10/100TX 103c 10e3 NetServer 10/100TX 103c 10e4 NetServer 10/100TX 103c 1200 NetServer 10/100TX 108e 10cf EtherExpress PRO/100(B) 10c3 1100 SmartEther100 SC1100 10cf 1115 8255x-based Ethernet Adapter (10/100) 10cf 1143 8255x-based Ethernet Adapter (10/100) 110a 008b 82551QM Fast Ethernet Multifuction PCI/CardBus Controller 114a 0582 PC8 onboard ethernet ETH2 1179 0001 8255x-based Ethernet Adapter (10/100) 1179 0002 PCI FastEther LAN on Docker 1179 0003 8255x-based Fast Ethernet 1259 2560 AT-2560 100 1259 2561 AT-2560 100 FX Ethernet Adapter 1266 0001 NE10/100 Adapter 13e9 1000 6221L-4U 144d 2501 SEM-2000 MiniPCI LAN Adapter 144d 2502 SEM-2100IL MiniPCI LAN Adapter 1668 1100 EtherExpress PRO/100B (TX) (MiniPCI Ethernet+Modem) 1775 1100 CR11/VR11 Single Board Computer 1775 ce90 CE9 4c53 1080 CT8 mainboard 4c53 10e0 PSL09 PrPMC 8086 0001 EtherExpress PRO/100B (TX) 8086 0002 EtherExpress PRO/100B (T4) 8086 0003 EtherExpress PRO/10+ 8086 0004 EtherExpress PRO/100 WfM 8086 0005 82557 10/100 8086 0006 82557 10/100 with Wake on LAN 8086 0007 82558 10/100 Adapter 8086 0008 82558 10/100 with Wake on LAN 8086 0009 82558B PRO/100+ PCI (TP) 8086 000a EtherExpress PRO/100+ Management Adapter 8086 000b EtherExpress PRO/100+ 8086 000c EtherExpress PRO/100+ Management Adapter 8086 000d EtherExpress PRO/100+ Alert On LAN II* Adapter 8086 000e EtherExpress PRO/100+ Management Adapter with Alert On LAN* 8086 000f EtherExpress PRO/100 Desktop Adapter 8086 0010 EtherExpress PRO/100 S Management Adapter 8086 0011 EtherExpress PRO/100 S Management Adapter 8086 0012 EtherExpress PRO/100 S Advanced Management Adapter (D) 8086 0013 EtherExpress PRO/100 S Advanced Management Adapter (E) 8086 0030 EtherExpress PRO/100 Management Adapter with Alert On LAN* GC 8086 0031 EtherExpress PRO/100 Desktop Adapter 8086 0040 EtherExpress PRO/100 S Desktop Adapter 8086 0041 EtherExpress PRO/100 S Desktop Adapter 8086 0042 EtherExpress PRO/100 Desktop Adapter 8086 0050 EtherExpress PRO/100 S Desktop Adapter 8086 1009 EtherExpress PRO/100+ Server Adapter 8086 100c EtherExpress PRO/100+ Server Adapter (PILA8470B) 8086 1012 EtherExpress PRO/100 S Server Adapter (D) 8086 1013 EtherExpress PRO/100 S Server Adapter (E) 8086 1015 EtherExpress PRO/100 S Dual Port Server Adapter 8086 1017 EtherExpress PRO/100+ Dual Port Server Adapter 8086 1030 EtherExpress PRO/100+ Management Adapter with Alert On LAN* G Server 8086 1040 EtherExpress PRO/100 S Server Adapter 8086 1041 EtherExpress PRO/100 S Server Adapter 8086 1042 EtherExpress PRO/100 Server Adapter 8086 1050 EtherExpress PRO/100 S Server Adapter 8086 1051 EtherExpress PRO/100 Server Adapter 8086 1052 EtherExpress PRO/100 Server Adapter 8086 10f0 EtherExpress PRO/100+ Dual Port Adapter 8086 1229 82557/8/9 [Ethernet Pro 100] 8086 2009 EtherExpress PRO/100 S Mobile Adapter 8086 200d EtherExpress PRO/100 Cardbus 8086 200e EtherExpress PRO/100 LAN+V90 Cardbus Modem 8086 200f EtherExpress PRO/100 SR Mobile Adapter 8086 2010 EtherExpress PRO/100 S Mobile Combo Adapter 8086 2013 EtherExpress PRO/100 SR Mobile Combo Adapter 8086 2016 EtherExpress PRO/100 S Mobile Adapter 8086 2017 EtherExpress PRO/100 S Combo Mobile Adapter 8086 2018 EtherExpress PRO/100 SR Mobile Adapter 8086 2019 EtherExpress PRO/100 SR Combo Mobile Adapter 8086 2101 EtherExpress PRO/100 P Mobile Adapter 8086 2102 EtherExpress PRO/100 SP Mobile Adapter 8086 2103 EtherExpress PRO/100 SP Mobile Adapter 8086 2104 EtherExpress PRO/100 SP Mobile Adapter 8086 2105 EtherExpress PRO/100 SP Mobile Adapter 8086 2106 EtherExpress PRO/100 P Mobile Adapter 8086 2107 EtherExpress PRO/100 Network Connection 8086 2108 EtherExpress PRO/100 Network Connection 8086 2200 EtherExpress PRO/100 P Mobile Combo Adapter 8086 2201 EtherExpress PRO/100 P Mobile Combo Adapter 8086 2202 EtherExpress PRO/100 SP Mobile Combo Adapter 8086 2203 EtherExpress PRO/100+ MiniPCI 8086 2204 EtherExpress PRO/100+ MiniPCI 8086 2205 EtherExpress PRO/100 SP Mobile Combo Adapter 8086 2206 EtherExpress PRO/100 SP Mobile Combo Adapter 8086 2207 EtherExpress PRO/100 SP Mobile Combo Adapter 8086 2208 EtherExpress PRO/100 P Mobile Combo Adapter 8086 2402 EtherExpress PRO/100+ MiniPCI 8086 2407 EtherExpress PRO/100+ MiniPCI 8086 2408 EtherExpress PRO/100+ MiniPCI 8086 2409 EtherExpress PRO/100+ MiniPCI 8086 240f EtherExpress PRO/100+ MiniPCI 8086 2410 EtherExpress PRO/100+ MiniPCI 8086 2411 EtherExpress PRO/100+ MiniPCI 8086 2412 EtherExpress PRO/100+ MiniPCI 8086 2413 EtherExpress PRO/100+ MiniPCI 8086 3000 82559 Fast Ethernet LAN on Motherboard 8086 3001 82559 Fast Ethernet LOM with Basic Alert on LAN* 8086 3002 82559 Fast Ethernet LOM with Alert on LAN II* 8086 3006 EtherExpress PRO/100 S Network Connection 8086 3007 EtherExpress PRO/100 S Network Connection 8086 3008 EtherExpress PRO/100 Network Connection 8086 3010 EtherExpress PRO/100 S Network Connection 8086 3011 EtherExpress PRO/100 S Network Connection 8086 3012 EtherExpress PRO/100 Network Connection 8086:2449 82801BA/BAM/CA/CAM Ethernet Controller 0e11 0012 EtherExpress PRO/100 VM 0e11 0091 EtherExpress PRO/100 VE 1014 01ce EtherExpress PRO/100 VE 1014 01dc EtherExpress PRO/100 VE 1014 01eb EtherExpress PRO/100 VE 1014 01ec EtherExpress PRO/100 VE 1014 0202 EtherExpress PRO/100 VE 1014 0205 EtherExpress PRO/100 VE 1014 0217 EtherExpress PRO/100 VE 1014 0234 EtherExpress PRO/100 VE 1014 023d EtherExpress PRO/100 VE 1014 0244 EtherExpress PRO/100 VE 1014 0245 EtherExpress PRO/100 VE 1014 0265 PRO/100 VE Desktop Connection 1014 0267 PRO/100 VE Desktop Connection 1014 026a PRO/100 VE Desktop Connection 109f 315d EtherExpress PRO/100 VE 109f 3181 EtherExpress PRO/100 VE 1179 ff01 PRO/100 VE Network Connection 1186 7801 EtherExpress PRO/100 VE 144d 2602 HomePNA 1M CNR 8086 3010 EtherExpress PRO/100 VE 8086 3011 EtherExpress PRO/100 VM 8086 3012 82562EH based Phoneline 8086 3013 EtherExpress PRO/100 VE 8086 3014 EtherExpress PRO/100 VM 8086 3015 82562EH based Phoneline 8086 3016 EtherExpress PRO/100 P Mobile Combo 8086 3017 EtherExpress PRO/100 P Mobile 8086 3018 EtherExpress PRO/100 Driver E100BNT.EXE, 3400952 bytes, released in April 1999. Driver warrenton382.exe, 16351744 bytes, released in June 2000. Driver IntelLAN_5.0.3_Win9x_WinME_Raw.exe*, 505879 bytes, released in January 2002. * Partialy compatible, however can be copied over older version installation.
*** 10ec Realtek **** 10ec:8139 RTL-8139/8139C/8139C+ 0357 000a TTP-Monitoring Card V2.0 1025 005a TravelMate 290 1025 8920 ALN-325 1025 8921 ALN-325 103c 006a NX9500 103c 30d9 Presario C700 1043 1045 L8400B or L3C/S notebook 1043 8109 P5P800-MX Mainboard 1071 8160 MIM2000 10bd 0320 EP-320X-R 10f7 8338 Panasonic CF-Y5 laptop 1113 ec01 FNC-0107TX 1186 1300 DFE-538TX 1186 1320 SN5200 1186 8139 DRN-32TX 11f6 8139 FN22-3(A) LinxPRO Ethernet Adapter 1259 2500 AT-2500TX 1259 2503 AT-2500TX/ACPI 1385 f31d FA311 v2 1395 2100 AMB2100 1429 d010 ND010/ND012 1432 9130 EN-9130TX 1436 8139 RT8139 144d c00c P30/P35 notebook 1458 e000 GA-7VM400M/7VT600 Motherboard 1462 0131 MS-1013 Notebook 1462 217c Aspire L250 1462 788c 865PE Neo2-V Mainboard 146c 1439 FE-1439TX 1489 6001 GF100TXRII 1489 6002 GF100TXRA 149c 139a LFE-8139ATX 149c 8139 LFE-8139TX 14cb 0200 LNR-100 Family 10/100 Base-TX Ethernet 1565 2300 P4TSV Onboard LAN (RTL8100B) 1631 7003 Onboard RTL8111 on GA-8SIML Rev1.0 Mainboard 1695 9001 Onboard RTL8101L 10/100 MBit 16ec 00ff USR997900A 1799 5000 F5D5000 PCI Card/Desktop Network PCI Card 1799 5010 F5D5010 CardBus Notebook Network Card 187e 3303 FN312 1904 8139 RTL8139D Fast Ethernet Adapter 2646 0001 KNE120TX 8e2e 7000 KF-230TX 8e2e 7100 KF-230TX/2 a0a0 0007 ALN-325C Driver nt351.zip, 24277 bytes, released in September 1998.
EN-US version of MSGINA.DLL from Windows NT3.51 Workstation SP5 SP5_351I.EXE .76E3218F: 68BC90E376 push 076E390BC -- 1 .76E32194: 683091E376 push 076E39130 ;'DefaultPassword' .76E32199: 681C91E376 push 076E3911C ;'Winlogon' .76E3219E: FF151C11E376 call GetProfileStringW ;KERNEL32 .76E321A4: 85C0 test eax,eax .76E321A6: 7412 je .076E321BA -- 4 (74 12 change to EB 00) .76E321A8: 8D45BC lea eax,[ebp][-44] .76E321AB: 50 push eax .76E321AC: 68CF000000 push 0000000CF ;' ¦' .76E321B1: 56 push esi .76E321B2: FF15A411E376 call SetDlgItemTextW ;USER32 .76E321B8: EB15 jmps .076E321CF -- 5 .76E321BA: 681891E376 4push 076E39118 -- 6 .76E321BF: 68F890E376 push 076E390F8 ;'AutoAdminLogon' .76E321C4: 680090E376 push 076E39000 ;'Winlogon' .76E321C9: FF151811E376 call WriteProfileStringW ;KERNEL32 .76E321CF: 83BFF00A000000 5cmp d,[edi][00000AF0],0 .76E321D6: 7559 jne .076E32231 -- 9 .76E321D8: 6A00 push 0 .76E321DA: 68BC90E376 push 076E390BC -- 1 .76E321DF: 68D490E376 push 076E390D4 ;'DefaultDomainName' .76E321E4: 68C090E376 push 076E390C0 ;'Winlogon' .76E321E9: E840FAFFFF call .076E31C2E -- CDon't forget to recalculate checksum of MSGINA.DLL. You can use editbin tool from Microsoft's Visual Studio or Platform SDK:
editbin /RELEASE MSGINA.DLL
А известно ли Вам что система NT/2K/XP позволяет грузится с HDD который не
определяется BIOS-ом на весь свой размер. (>504 Mb, > 8 Gb, > 137 Gb и т.д.) Также возможна установка NT/2K/XP на такой диск.
Делается так:
[boot loader] timeout=30 default=scsi(0)disk(0)rdisk(0)partition(1)\WINNT [operating systems] scsi(0)disk(0)rdisk(0)partition(1)\WINNT="Microsoft Windows NT" scsi(0)disk(0)rdisk(0)partition(1)\WINNT="Microsoft Windows NT [VGA mode]" /basevideo /sosт.е. поменять префикс multi(0) на scsi(0).
Before:
if ((vinfo.dwMajorVersion < 4) || (vinfo.dwPlatformId == VER_PLATFORM_WIN32s))After:
if (vinfo.dwPlatformId == VER_PLATFORM_WIN32s)Note that glQuake REQUIRES MESA opengl32.dll or other third-party dll that supports OpenGL extensions version 1.1 and later.
Use these toolkits - ERUNT and NTREGOPT. It also supports NT4/2000/XP. If you want to use builtin methods, run from Windows NT:
rdisk /s-
And your registry will be backed up to %SystemRoot%\REPAIR and defragmented there. You can extract hives from %SystemRoot%\REPAIR to %SystemRoot%\SYSTEM32\CONFIG as them packed in Micrsoft CAB-format. But note that you cannot replace hives in %SystemRoot%\SYSTEM32\CONFIG while Windows NT is running, you must dualboot of enter DOS session.
For "user-mode" program debugging any debugger is suitable, even NT4/W2K/XP ones. But for remote KERNEL debugging I recommend using ONLY "native" i386kd.exe debugger from NT 3.51 Device Development Kit (DDK). NT4/W2K DDK can start remote debugging connections to NT 3.51 but their output and stability is worse than with "native" DDK. Also note that NT 3.51 cdb/ntsd/i386kd debugger cannot recognize PDB debug symbols, which is standard starting with Visual Studio 97/6.0 and later (i.e. VC5/VC6). You must use DBG symbols. Here is DBG-making procedure for Microsoft Visual C/C++ compilers:
dumpbin /headers somefile.exethen search for:
OPTIONAL HEADER VALUES 10B magic # 6.00 linker version 15000 size of code 8000 size of initialized data 0 size of uninitialized data 1100 RVA of entry point 1000 base of code 16000 base of data 400000 image base // bingo!
rebase -b 0x400000 -x . somefile.exe
The CreateDesktop function creates a new desktop on the window station associated with the calling process. It retrieves a handle that can be used to access the new desktop. The calling process must have an associated window station, either assigned by the system at process creation time or set by SetProcessWindowStation. A desktop is a secure object contained within a window station object. A desktop has a logical display surface and contains windows, menus, and hooks.
HDESK CreateDesktop( LPCTSTR lpszDesktop, // name of new desktop LPCTSTR lpszDevice, // reserved; must be NULL LPDEVMODE pDevmode, // reserved; must be NULL DWORD dwFlags, // desktop interaction ACCESS_MASK dwDesiredAccess, // access of returned handle LPSECURITY_ATTRIBUTES lpsa // security attributes );
CreateDesktop exists in Unicode variant - CreateDesktopW(), and "normal" - CreateDesktopA().
Here I can explain what for lpszDevice and pDevmode are needed. When I first "met" NT 3.5x line I asked myself a question: why NT 3.5x cannot change screen resolution on-the-fly without rebooting, but otherways can test ANY mode for visibility in "Control Panel->Display" about some seconds.
These two reserved parameters made for creating new desktop surface with any chosen screen resolution.
lpszDevice parameter is a pointer to ASCIIz name of display device, as usual it is "\\.\Display1", "\\.\Display2", "\\.\Display3"...
pDevmode parameter is a pointer to standard DEVMODE structure (see MSDN), it can be obtained using EnumDisplaySettings(), EnumDisplaySettingsEx() or filled manually.
When these two field are NULL any CreateDesktop() call will create empty desktop with the same resolution as the system desktop, but when they are filled - it is possible to create desktop with any resoltion your videocard supports. This functionality also present in later NT incarnations - NT4/2000/XP/2003...
Starting from Windows NT 4.0, NTOSKRNL.EXE contains some basic 64-bit integer arithmetic API:
LONGLONG WINAPI _allmul( LONGLONG a, LONGLONG b ) return a * b; LONGLONG WINAPI _alldiv( LONGLONG a, LONGLONG b ) return a / b; LONGLONG WINAPI _allrem( LONGLONG a, LONGLONG b ) return a % b; LONGLONG WINAPI _allshr( LONGLONG a, LONGLONG b ) return a >> b; ULONGLONG WINAPI _aullmul( ULONGLONG a, ULONGLONG b ) return a * b; ULONGLONG WINAPI _aulldiv( ULONGLONG a, ULONGLONG b ) return a / b; ULONGLONG WINAPI _aullrem( ULONGLONG a, ULONGLONG b ) return a % b; ULONGLONG WINAPI _aullshl( ULONGLONG a, ULONGLONG b ) return a << b; ULONGLONG WINAPI _aullshr( ULONGLONG a, ULONGLONG b ) return a >> b;
But in NT 3.51 NTOSKRNL.EXE or NTDLL.DLL does not contains such functions. Use INT64.LIB static library for them. Please be aware while compiling drivers or native-mode programs for NT 3.51 using Windows 2000 DDK and higher!
It has official software OpenGL 1.0 support via internal opengl32.dll. But note that some APIs are missing and present only in Windows 98/NT4/2000/XP and later (opengl32.dll with OpenGL 1.1 support):
glAreTexturesResident glArrayElement glBindTexture glColorPointer glCopyTexImage1D glCopyTexImage2D glCopyTexSubImage1D glCopyTexSubImage2D glDebugEntry glDeleteTextures glDisableClientState glDrawArrays glDrawElements glEdgeFlagPointer glEnableClientState glGenTextures glGetPointerv glIndexPointer glIndexub glIndexubv glInterleavedArrays glIsTexture glNormalPointer glPolygonOffset glPopClientAttrib glPrioritizeTextures glPushClientAttrib glTexCoordPointer glTexSubImage1D glTexSubImage2D glVertexPointer
So, you MUST avoid using these APIs in your programs. However, some of them are available in Windows NT 3.5x in GL_EXT_vertex_array extension using wglGetProcAddress() API:
glArrayElementEXT glColorPointerEXT glDrawArraysEXT glEdgeFlagPointerEXT glGetPointervEXT glIndexPointerEXT glNormalPointerEXT glTexCoordPointerEXT glVertexPointerEXTThere is a hardware OpenGL support via third-party installable client driver (OpenGL ICD) for some cards:
OPGL351.EXE 714,6 kB 28.8.1998 Display Driver with OpenGL support for ATI 3D RAGE II/II+.
To overcome these limits you can use software MESA OpenGL driver that is compatible with NT 3.51 and provides OpenGL 2.1 API (Mesa 6.5.3, 7.x and later), this driver is preferred over internal OpenGL support. However it is slower. You can compile it using MinGW or Microsoft C/C++.
In 1996 Microsoft release a special "update" for NT 3.51 - Shell Technology Preview and later - Shell Technology Preview Update the second beta release. It provides Windows 95/NT4.0 "look and feel" visual update for this OS. It is an unsupported and test-only release.
To install TechPreview unpack ZIP archive ( 05/26/95 or 08/09/95 release ) with it to somewhere and run:
shupdate.cmdTo uninstall, run:
shupdate.cmd /u
Special notes: I do not recommend this update to be installed. If you anyway wish to install it make sure that you install all hotfixes and updates BEFORE installing this TechPreview. Note that when this TechPreview is installed Windows NT 3.51 is now reported as Windows NT 4.0 (i.e. for example it reports itself as Windows NT 4.0 Service Pack 5 if before it was Windows NT 3.51 Service Pack 5). This is normal and made for compatibility reasons. Some programs which cannot run under NT 3.51 may run under this "updated" OS, some - may have different compatibility problems due to its beta status.
According to MSDN, The Windows Sockets WSAStartup function initiates use of sockets DLL (Ws2_32.dll/Wsock32.dll) by a process.
int WSAStartup( WORD wVersionRequested, LPWSADATA lpWSAData );
WSAData.iMaxUdpDg contains an actual maximum UDP message size specific to a particular Windows Sockets 1.x service provider and socket type.
The Windows Sockets getsockopt function retrieves a Winsock 2.0 socket option.
int getsockopt( SOCKET s, int level, int optname, char FAR *optval, int FAR *optlen );
The getsockopt function retrieves the current value for a socket option associated with a socket of any type, in any state, and stores the result in optval. Options can exist at multiple protocol levels, but they are always present at the uppermost socket level. Options affect socket operations, such as the packet routing and OOB data transfer.
When optval is SO_MAX_MSG_SIZE it returns maximum size of a message for message-oriented socket types (for example, SOCK_DGRAM). Has no meaning for stream oriented sockets.
Windows version, WSAData.iMaxUdpDg getsockopt(SO_MAX_MSG_SIZE) Service Pack Winsock 1.x (Wsock32.dll) Winsock 2.0 (Ws2_32.dll) ----------------------- ------------------------- --------------------------- NT3.51 65527, -n/a- NT4(SP6a)/2000(pre-SP3) 65467, 65527 2000(SP3+)/XP/2003 65467, 65507According to this MS Article MSKB: Getsockopt() Function Returns a Different Maximum UDP Message Size Than You Expect in Windows 2000 SP3 (Q822061) this is wrong. Don't be fooled that this article is covers Windows 2000, that problem also exists in previous Windows versions. But it fixed only in Windows 2000 SP3, thanks to Microsoft :).
The correct maximum UDP message size is 65507, as determined by the following formula: 0xffff - (sizeof(IP Header) + sizeof(UDP Header)) = 65535-(20+8) = 65507
If we try to send or receive message larger than 65507, we receive an error. So it is a good idea to check this value and make it <= 65507 bytes.
When you perform a clean install of NT 3.51 OS you may face a problem that you cannot install any local printer and/or select a port for it. You may also see such message as "Could not create printer: The printer name is invalid." and see no ports available for output. This is due to some missing registry entries:
; Default Print Processor [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Environments\Windows NT x86\Print Processors\winprint] "Driver"="winprint.dll" ; Local Computer Printing [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Local Port] "Driver"="localmon.dll" ; TCP-IP Printing, LPD [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\LPR Port] "Driver"="lprmon.dll"
You may use regedt32.exe to make these changes. Before making them, make sure that these files are installed from NT 3.51 distribution media:
winprint.dll must be in %SystemRoot%\SYSTEM32\sPOOL\PRTPROCS\W32X86 localmon.dll must be in %SystemRoot%\SYSTEM32 lprmon.dll must be in %SystemRoot%\SYSTEM32
Microsoft confirmed some of these problems, see articles:
Some theory: Most of POSTSCRIPT printer drivers in Windows NT is module-based, and consists of three parts:
PSCRIPT.DLL PSCRPTUI.DLL PSCRIPT.CNT PSCRIPT.HLP PSCRIPT.SEP
PLOTTER.DLL PLOTUI.DLL PLOTUI.CNT PLOTUI.HLP
Now we know it. But how to install a new printer or plotter (which of course, doesn't have a suitable driver, since mainstream NT 3.51 support for printers was already cancelled) ? I'll take for example HP Color LaserJet 3800N, which is officialy unsupported in Windows 3.51.
Here are the steps:
[Identification] OptionType = PRINTER [Options] "HP Color LaserJet 3800 PS" = pscrptui, hpc3800s, pscript [Identify] ... ... [Files-PrinterData] hpc3800s = 2,hpc3800s.ppd ... ... [OptionsTextENG] "HP Color LaserJet 3800 PS" = "HP Color LaserJet 3800 PS"Note that name, which I use - "HP Color LaserJet 3800 PS", I reprint from header of hpc3800s.ppd. This is important!
In Windows NT SCSIPORT.SYS driver, which performes most operations between storage driver (atapi.sys, intelata.sys, uniata.sys, viaide.sys, atdisk.sys or any other) and NT's kernel, there is a serious bug which prevents detection of storage controllers in some chipsets. Now problem confirmed with some of Intel ICH8, ICH9, ICH10 chipsets in any working mode (RAID, AHCI, Native IDE and Legacy).
When storage driver tries to setup and initialize controller resources on a PCI/PCIe bus it calls SCSIPORT.ScsiPortInitialize() from its DriverEntry() for each detected controller. This function scans all buses and tries to find and initialize controller with given device/vendor id. It scans sequental first for buses, second for devices (from 0 to 31), third for functions (from 0 to 7). When it sees that there is no given function, it breaks loop and scans for next device/bus.
PCI Busses, Devices and Device Functions Tree --Bus 0 (PCI Express) +-- Device 0 - 8086h:2990h Q963/Q965 Memory Controller Hub +-- Device 2 - 8086h:2992h Q963/Q965 Integrated Graphics Controller +-- Device 3 - 8086h:2994h Q963/Q965 HECI Controller +-- Device 25 - 8086h:104Bh 82566DC Gigabit Network Connection +-- Device 26 ¦ +-- Function 0 - 8086h:2834h 82801H (ICH8 Family) USB UHCI #4 ¦ +-- Function 1 - 8086h:2835h 82801H (ICH8 Family) USB UHCI #5 ¦ L-- Function 7 - 8086h:283Ah 82801H (ICH8 Family) USB2 EHCI #2 +-- Device 28 ¦ +-- Function 0 - 8086h:283Fh 82801H (ICH8 Family) PCIe Port 1 ¦ ¦ L--> Bus 1 ¦ +-- Function 1 - 8086h:2841h 82801H (ICH8 Family) PCIe Port 2 ¦ ¦ L--> Bus 2 ¦ +-- Function 2 - 8086h:2843h 82801H (ICH8 Family) PCIe Port 3 ¦ ¦ L--> Bus 3 ¦ +-- Function 3 - 8086h:2845h 82801H (ICH8 Family) PCIe Port 4 ¦ ¦ L--> Bus 4 ¦ L-- Function 4 - 8086h:2847h 82801H (ICH8 Family) PCIe Port 5 ¦ L--> Bus 5 +-- Device 29 ¦ +-- Function 0 - 8086h:2830h 82801H (ICH8 Family) USB UHCI #1 ¦ +-- Function 1 - 8086h:2831h 82801H (ICH8 Family) USB UHCI #2 ¦ +-- Function 2 - 8086h:2832h 82801H (ICH8 Family) USB UHCI #3 ¦ L-- Function 7 - 8086h:2836h 82801H (ICH8 Family) USB2 EHCI #1 +-- Device 30 - 8086h:244Eh 82801HB Hub Interface to PCI Bridge (ICH8 B0 step) ¦ L--> Bus 6 L-- Device 31 +-- Function 0 - 8086h:2810h 82801HB/HR (ICH8/R) LPC Interface Controller +-- Function 2 - 8086h:2824h 82801HR/HO/HH (ICH8R/DO/DH) SATA AHCI Controller L-- Function 3 - 8086h:283Eh 82801H (ICH8 Family) SMBus Controller --Bus 1 (PCI) L-- No Devices Currently Present --Bus 2 (PCI Express) L-- Device 0 - 11ABh:6101h 6101 SATA2 Controller --Bus 3 (PCI) L-- No Devices Currently Present --Bus 4 (PCI) L-- No Devices Currently Present --Bus 5 (PCI) L-- No Devices Currently Present --Bus 6 (PCI) L-- Device 2 - 8086h:1026h 82545GM Gigabit Ethernet Controller A total of 22 Items FoundIt is a PCI dump from ICH8 AHCI system. Look above at Device 29, Device 31. In Device 29 there is NO Function 3, in Device 31 there is NO Function 1. So all function below this absent one will be skipped due to bug in SCSIPORT.SYS. Skipped Device 31 Function 2 is a SATA Controller! Not good!
However there are systems that free of such bug:
PCI Busses, Devices and Device Functions Tree --Bus 0 (PCI Express) +-- Device 0 - 8086h:29C0h P35/G33 (Bearlake) Processor to I/O Controller +-- Device 1 - 8086h:29C1h P35/G33 (Bearlake) PCIe Root Port ¦ L--> Bus 1 +-- Device 2 - 8086h:29C2h P35/G33 (Bearlake) Integrated Graphics Controller +-- Device 27 - 8086h:27D8h 82801G (ICH7 Family) High Definition Audio +-- Device 29 ¦ +-- Function 0 - 8086h:27C8h 82801G (ICH7 Family) USB Universal Host Controller ¦ +-- Function 1 - 8086h:27C9h 82801G (ICH7 Family) USB Universal Host Controller ¦ +-- Function 2 - 8086h:27CAh 82801G (ICH7 Family) USB Universal Host Controller ¦ +-- Function 3 - 8086h:27CBh 82801G (ICH7 Family) USB Universal Host Controller ¦ L-- Function 7 - 8086h:27CCh 82801G (ICH7 Family) USB 2.0 Enhanced Host Controller +-- Device 30 - 8086h:244Eh 82801GB Hub Interface to PCI Bridge (ICH7 A1 step) ¦ L--> Bus 2 L-- Device 31 +-- Function 0 - 8086h:27B8h 82801GB/GR (ICH7 Family) LPC Interface Controller +-- Function 1 - 8086h:27DFh 82801G (ICH7 Family) Ultra ATA Storage Controller +-- Function 2 - 8086h:27C0h 82801GB/GR/GH (ICH7 Family) Serial ATA Storage Controller L-- Function 3 - 8086h:27DAh 82801G (ICH7 Family) SMBus Controller --Bus 1 (PCI) L-- No Devices Currently Present --Bus 2 (PCI) L-- Device 8 - 8086h:1094h PRO/100 VE Network Connection A total of 15 Items FoundThere is NO Device 29, Function 4, but our bug is storage controller related. Device 31 is OK, so we don't care this Device 29. We also can consider that this bug is also can be BIOS-related, and can be solved by bugfix BIOS update from motherboard manufacturer.
In some cases drive letters mapped according to exising partitions are not created correctly.
This is due to NT 3.51 cannot detect some nonstandard partition types.
However, with a registry modification it is possible to forcibly assign a UNC path to a drive letter during startup so it will be persist.
Start REGEDT32.EXE and create a new registry entry "String Value" in the following key:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices
The name should be "X:" where X is the drive letter (which must be unused!).
The value should be the path in the form:
\Device\HarddiskA\PartitionB
Where A is starting from 0 and B is starting from 1.
Use this code in WinMain() :
ctl3d.dll
ctl3dv2.dll
ctl3d32.dll
HINSTANCE hCtl3d; void WINAPI Ctl3dLoad(HINSTANCE hInst) { BOOL (WINAPI *Ctl3dRegister)(HANDLE); BOOL (WINAPI *Ctl3dAutoSubclass)(HANDLE); SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOOPENFILEERRORBOX); hCtl3d = LoadLibrary(TEXT("ctl3d32.dll")); if ((UINT)hCtl3d <= HINSTANCE_ERROR) hCtl3d = LoadLibrary(TEXT("ctl3dv2.dll")); if ((UINT)hCtl3d <= HINSTANCE_ERROR) hCtl3d = LoadLibrary(TEXT("ctl3d.dll")); if ((UINT)hCtl3d <= HINSTANCE_ERROR) { hCtl3d = 0; return; } Ctl3dRegister = (BOOL (WINAPI *)(HANDLE))GetProcAddress(hCtl3d, "Ctl3dRegister"); Ctl3dAutoSubclass = (BOOL (WINAPI *)(HANDLE))GetProcAddress(hCtl3d, "Ctl3dAutoSubclass"); if (Ctl3dRegister && Ctl3dAutoSubclass) { Ctl3dRegister(hInst); Ctl3dAutoSubclass(hInst); } SetErrorMode(0); } void WINAPI Ctl3dUnload(HINSTANCE hInst) { BOOL (WINAPI *Ctl3dUnRegister)(HANDLE); if (hCtl3d) { Ctl3dUnRegister = (BOOL (WINAPI *)(HANDLE))GetProcAddress(hCtl3d, "Ctl3dUnRegister"); if (Ctl3dUnRegister) Ctl3dUnRegister(hInst); FreeLibrary(hCtl3d); } }
Add DS_3DLOOK style to exising dialog styles.
In CMFCApp::InitInstance() add this code :
if ((GetVersion() & 0xFF) < 5) // Before Windows 2000 #ifdef _AFXDLL Enable3dControls(); // Call this when using MFC in a shared DLL #else Enable3dControlsStatic(); // Call this when linking to MFC statically #endif