Jump to content

XP/W2k3 x86 on Modern Hardware


George King

Recommended Posts

1 hour ago, Dietmar said:

I just build an XP SP3 with the Sata driver from Kai and the storport.sys with SMART support, with all updates for XP and my last acpi.sys from last August.

For USB I use the from Win8.1 ported driver.

It boots XP SP3 on all(!) my Intel boards from x58 to z690, always all USB works,

niccccee😍

Dietmar

Hi Dietmar,

could you kindly point out the SHA-1 of the storport.sys with SMART support you are using? Does it report data smart for the NVMe drives as well?

Thanks as always for your helpful info and support ;)

Edited by Andalu
Link to comment
Share on other sites

14 hours ago, Dietmar said:

I just build an XP SP3 with the Sata driver from Kai and the storport.sys with SMART support, with all updates for XP and my last acpi.sys from last August.

For USB I use the from Win8.1 ported driver.

It boots XP SP3 on all(!) my Intel boards from x58 to z690, always all USB works,

niccccee😍

Dietmar

Ported USB drivers from 8.1? Any links? :)

Link to comment
Share on other sites

If anyone is interested, there is a new storport for Windows 7 in KB5010404

 

x86 storport 6.1.7601.25735
msi patch
hexposition: 4E1A	change:	8B 8E 3C 01 00 00	->	B9 00 00 00 00 90

smart patch
hexposition: 1030A	75 36 	->	90 90
hexposition: 10316	75 2A	->	90 90

==========================================================================
x64 storport 6.1.7601.25735
msi patch
hexposition: 156AE	change:	8B 83 C0 01 00 00	->	B8 00 00 00 00 90

smart patch
hexposition: 192D5	change:	75 36	->	90 90
hexposition: 192DE	change:	75 2D	->	90 90

 

Link to comment
Share on other sites

14 hours ago, Dietmar said:

@Andalu

It is this storport.sys

https://ufile.io/4euzojgb

 

with SHA-1

3DDD09C2E6909926E8CE0F672CA7F8C020420050
 
Have a nice day
Dietmar

I encountered some problems with that storport.sys getting the same error code 39 for all NVMe drivers I have installed (Samsung, Microsoft and OFA v1.5 and v1.3). I only uploaded the image for the OFA v1.5 driver:

Error-on-OFA-NVMe-driver-1-5.png

 

No problem using Kai-Schtrom's sata/ahci driver and another version of storport.sys (in the screenshot is the one by @George King), where you can also get the smart data from the latest version of CrystalDiskInfo for the NVMe drive but only with the Samsung NVMe driver and when DiskInfo32.exe can no longer load the wbemprox.dll otherwise it crashes (that library can also be renamed for testing purposes only):

OK-on-OFA-NVMe-driver-1-5.png

Link to comment
Share on other sites

@Andalu

...continuing from PM.  Yeah, I tested renaming wbemprox.dll as a test yesterday it it fixed it for me as well on x64.  I agree that renaming it is not the best since windows must need WBEM for other stuff. 

I looked at dropping the windows 7 wbem related files into the CrystalDiskInfo to load from there first, but its a lot a extra files, and some dependencies are missing.  Easiest would be to simply stop Crystal from loading it at all, since it looks like it works well enough without it.

Looked over the source code last night, there is a include <wbemcli.h> in AtaSmart.cpp and SlotSpeedGetter.cpp.  I was thinking if maybe if I run it with IDA or something maybe we can track to where it breaks and hopefully jump over to the "file not found" case where it loads fine without it.  Never used it that way before.  Need to find an older version of IDA Free that works on XP.  The one I have is to new.

 

Link to comment
Share on other sites

Not much to go on in IDA to my untrained eyes.  I assume all the dll loading happens at the very beginning of "start", errors out, then it quickly gets sent to trap.  Error looks like it happens before we can do anything in Crystal.  Playing with it there did nothing useful.

CDI.png

ProcMon shows it using a couple of wbem dlls.  Yet no dependency for it with Dependency Walker, or any mention of them in Crystal's dissembled EXE.

procmon.png

diss.png

I guess one of the known dlls causes the webm to be loaded without any explicitly defined imports.  Something using LoadLibrary maybe...

 

So the question is then.  How does one use IDA or something else to trace where and in what DLL does wbemprox.dll first load?

Link to comment
Share on other sites

https://itm4n.github.io/windows-dll-hijacking-clarified/
This explains better but Dependency Walker only checks if DLL is the import table.  At runime a program can use LoadLibrary() to call other dlls.  I looked through all the DLL from DepWalker that Crystal uses, but didnt see one that was "wbem" or "wmi" sounding...

I tried replacing the 4 WMI related DLLs that Crystal needs into the windows sys folder.  Dependency wise there was no issues, but Crystal still crashed.

In IDA, there is a "Suspended on Library load/unload".  Running it, it looks like ntdll.dll is where wbmprox first loads, but a bunch of other DLLs load in that same spot is how it looked to me in IDA.  No idea how to look up where it was in ntdll.dll itself...

Sumbled upon a "debug" setting that can be turned on in Crystal's ini. In there, the last entry before failure was "CMD_TYPE_NVME_INTEL".  Opening up DiskInfo.exe, subroutine was findable with that name.  A lot of IdentifyDevice, AddDevice calls, most ending up at a block with many inputs (all the Info/Add Devices Intel/Samsung/etc...) just before sub exits.  Adding a breakpoint, it looks like Crystal gets through the NVME_INTEL block, and errors out at the MultiBlock..  Jumped out @4cf96 74 -> EB to skip "AddDiskNVMe - CMD_TYPE_NVME_INTEL".  CDI starts at least, but nvme does not show up.  Then tried skiping "DoIdentifyDeviceNVMeIntel" which calls ""AddDiskNVMe - CMD_TYPE_NVME_INTEL" @4ced8    74 77 -> 90 90    @4cf4b    0F 85 0A 01 00 00 -> E9 0B 01 00 00 90.  Same things starts, but no nvme.

00001110 DoIdentifyDeviceNVMeStorageQuery
00001110 DoIdentifyDeviceNVMeIntelRst
00001110 DoIdentifyDeviceNVMeSamsung
00001110 DoIdentifyDeviceNVMeIntel
00001110 AddDiskNVMe - CMD_TYPE_NVME_INTEL

 

Looked further up the logfile.  Compared one with wbemprox removed to a normal one.

no wbem / works

00000000 dlg.DoModal()
00000015 InitAta
00000015 CAtaSmart::Init WMI on - Start
00000015 CoInitializeSecurity()
00000031 CoCreateInstance()
00000031 NG:WMI Init 1

wbem / fails

00000016 dlg.DoModal()
00000032 InitAta
00000032 CAtaSmart::Init WMI on - Start
00000032 CoInitializeSecurity()
00000032 CoCreateInstance()
00000032 ConnectServer()
00000032 CoSetProxyBlanket()
00000047 OK:WMI Init
00000782 OK:Win32_IDEController
00000813 OK:Win32_SCSIController

Searched around on on those keywords.  ConnectServer() to a wmi server maybe?  Ended up in two subroutines that sounded interesting.  Saw "\\.\root\cimv2" which was familiar... 

Borrowed a quick vbscript to try wmi.  Breaking the path stops it from working.

strComputer = "." 
Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2") 
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Process" & _
           " WHERE Name = 'cscript.exe'" & " OR Name = 'wscript.exe'",,48) 
For Each objItem in colItems 
    Wscript.Echo "-------------------------------------------"
    Wscript.Echo "CommandLine: " & objItem.CommandLine
    Wscript.Echo "Name: " & objItem.Name
Next

useWMI.png

Connect-Server.png

So in DiskInfo32 or DiskInfo64, find where "\ \ . \ r o o t \ c i m v 2" is with hex editor and change it to something like "\ \ . \ r o o t \ n o w m i".  630069006D00760032 -> 6E006F0077006D0069

Then let DiskInfo handle the error of a missing wmi the same way as if wbemprox file was missing.

 

Link to comment
Share on other sites

@Andalu

Crystal Disk Info modded to stop WMI from loading.

https://ufile.io/16asy5na

I tried both 32 and 64bit version on my XP64.  Both worked with my samsung nvme (didnt load NVMe size like for SSD/HDD but that info should be in the model names anyway).

Now for the real question.  Has anyone tried to use the samsung NVMe driver with a not samsung nvme?  I only have the one so I cant test but I would be interested to see if the driver would work and pass through SMART for other manufactures.

I tested the generic driver inf for samsung originally posted by Fernando and it worked for my samsung.  Here's the same one for x86. (I leave it to you guys to mod the secnvme for x86).

;
; Copyright ©Samsung Electronic Co,. Ltd 2019
;

[Version]
Signature="$Windows NT$"
Provider=%SAM%
ClassGUID={4D36E97B-E325-11CE-BFC1-08002BE10318}
Class=SCSIAdapter
CatalogFile=secnvme.cat
DriverVer=01/21/2020,3.3.0.2003

[Manufacturer]
%SAM% = COMM, NTx86

[SourceDisksNames]
1 = %DiskId1%,,,""

[DestinationDirs]
DefaultDestDir   = 12

[nvme_Service_Inst]
ServiceType    = %SERVICE_KERNEL_DRIVER%
StartType      = %SERVICE_BOOT_START%
ErrorControl   = %SERVICE_ERROR_NORMAL%
ServiceBinary  = %12%\secnvme.sys
LoadOrderGroup = SCSI miniport
AddReg         = pnpsafe_pci_addreg
AddReg         = Parameters


[nvme_EventLog_Inst]
AddReg = nvme_EventLog_AddReg

[nvme_EventLog_AddReg]
HKR, , EventMessageFile, %REG_EXPAND_SZ%, "%%SystemRoot%%\System32\IoLogMsg.dll;%%SystemRoot%%\System32\drivers\secnvme.sys"
HKR, , TypesSupported, %REG_DWORD%, 7


[pnpsafe_pci_addreg]
HKR, "Parameters\PnpInterface", "5", %REG_DWORD%, 0x00000001
HKR, "Parameters", "BusType", %REG_DWORD%, 0x00000011

[msi_addreg]
HKR, Interrupt Management, 0x00000010
HKR, Interrupt Management\MessageSignaledInterruptProperties, 0x00000010
HKR, Interrupt Management\Affinity Policy, 0x00000010
HKR, Interrupt Management\MessageSignaledInterruptProperties, MSISupported, %REG_DWORD%, 0
HKR, Interrupt Management\MessageSignaledInterruptProperties, MessageNumberLimit, %REG_DWORD%, 2048
HKR, Interrupt Management\Affinity Policy, DevicePolicy, %REG_DWORD%, 5 ;IrqPolicySpreadMessagesAcrossAllProcessors
HKR, Interrupt Management\Affinity Policy, DevicePriority, %REG_DWORD%, 3
HKR, Interrupt Management\Affinity Policy, GroupPolicy, %REG_DWORD%, 1

[Parameters]
HKR, Parameters\Device, Namespaces,            %REG_DWORD%, 0x00000010
HKR, Parameters\Device, MaxTXSize,             %REG_DWORD%, 0x00020000
HKR, Parameters\Device, AdQEntries,            %REG_DWORD%, 0x00000080
HKR, Parameters\Device, IoQEntries,            %REG_DWORD%, 0x00000400
HKR, Parameters\Device, IntCoalescingTime,        %REG_DWORD%, 0x00000000
HKR, Parameters\Device, IntCoalescingEntries,        %REG_DWORD%, 0x00000000
HKR, Parameters\Device, InitErrorLog,           %REG_DWORD%, 0x00000000
 
[SourceDisksFiles.amd64]
secnvme.sys = 1,,,


[COMM.NTx86]
%COMMNvme.DeviceDesc%         = nvme_inst, PCI\CC_010802

 

[nvme_inst.NTx86]
CopyFiles=@secnvme.sys
FeatureScore=0x80

[nvme_inst.NTx86.HW]
AddReg = msi_addreg


[nvme_inst.NTx86.Services]
AddService = secnvme, 0x00000002 , nvme_Service_Inst, nvme_EventLog_Inst

 

[Strings]
;
; Localizable Strings
;
diskId1 = "NVME Installation Disk"
COMMNvme.DeviceDesc      = "Samsung NVMe Controller"

 

SAM = "Samsung Electronics Co., Ltd"

;
; Non-Localizable Strings
;

REG_EXPAND_SZ  = 0x00020000
REG_DWORD      = 0x00010001
SERVICE_KERNEL_DRIVER  = 1
SERVICE_BOOT_START     = 0
SERVICE_ERROR_NORMAL   = 1
SERVICE_ERROR_CRITICAL = 3

 

Link to comment
Share on other sites

Oh..

soso much fun;)).

This is my generic XP SP3,

which can boot all Intel boards.

This is photo from Asrock x58 extreme.

It has an IDE connector and an connector for Floppy drive.

Just now it works also with nvme Optane 905p

Dietmar

20220302-205824.jpg

Link to comment
Share on other sites

6 hours ago, pappyN4 said:

catching up on TRIM in the deleted thread...

Is there a backport win8 storport?  Or is it just the storpor8.sys that was being discussed?  NTOSKRNL_Emu has missing dependencies with win8 storport.

storpor8.sys is emulator of some new functions for win7's storport.sys

I have experimental ported win8.0 storport.sys, it has many manual injected calls to PoStartNextPowerIrp(), perfectly works with win8's storahci

Me and Daniel chose win7's storport.sys as base for ported storage drivers because it was last version who stills call PoStartNextPowerIrp() at proper places

Link to comment
Share on other sites

@pappyN4

Thank you for the modified DiskInfo.exe and for explaining how to make it work.

As for the Samsung NVMe driver, I've installed XP on NVMe drives like WD SN750, Crucial P5, and Sabrent Rocket with no problems. Now I can get smart data for all of them with CrystalDiskInfo.

I add that if @Dietmar said that this driver doesn't work all the time, I have no reason to have doubts.

Link to comment
Share on other sites

I'm trying to get an optane 905p working on my z390 dark with XP SP3. It sees it as a PCI device on bus 7 and it is recognized in the bios. However, it is not recognized as a drive in the OS. I used the storport.sys with SMART support, and the StorAhci_V1.0_20200928.rar. Should I need to do anything other than replace storport.sys?

Edit:

I think I found the two files I missed in the previous archive. Playing with it more now.

Edit:

I'm now using the storport.sys, stornvme.sys, and stornvme.inf from the 905p suggestions archive. I see in event manager that \Device\RaidPort3 and \Device\RaidPort4 and \Device\RaidPort5 encountered an error with stornvme.sys. It then seems to try to make a crash dump and fails.

Edit:

Disabled Raid in the bios. The message says the error is on "\Device\RaidPort3". Attempting to update the driver for the NVME express controller just iterates the RaidPort (then, RaidPort4...5...etc)

Edited by Dallen
Link to comment
Share on other sites

Hello all!

I am trying to use USB xHCI drivers on GA-Z87P-D3 mobo with XP Integral Edition 2021.12.19. I chose different options in the integrator script and then installed XP from the customized ISO. All drivers stop with Code 10 error unfortunately.

The drivers I tried were AMDXHCI XP 145-Final v3, AMDXHCI XP 276-Final v3, MovAX-Gen2 USB3.X xHCI driver v2.2.

 

On 1/30/2022 at 2:49 AM, Dietmar said:

@Andalu

I use the acpi.sys from August 2021, with my last modd.

This is the standard acpi.sys now for Ramsey's XP SP3.

The USB8 files are here. They are different from yours

https://ufile.io/sw7t8mol

Dietmar

 

@Dietmar @Mov AX, 0xDEAD

If there is a newer USB driver, I would like to give it a try. Could you please share another download link? The download given above is paywalled unfortunately.

Thanks in advance!

Link to comment
Share on other sites

I make some more fun:

Here I compare a 12600 against an i980 on a x58 Sabertooth board with generic XP SP3.

This x58 board has onboard USB3 (Nec, 214MByte/s RW) and also 6 GByte Sata (Sata3).

Voila, geekbench 2 shows about 14000 points for the 12600 cpu and about 12000 points for the i980 cpu.

Hm, this means nearly no difference in speed in 11 years old cpu

Dietmar

PS: All USB works with the nice win8 driver from @Mov AX, 0xDEAD .

 

20220306-135737.jpg

Edited by Dietmar
Link to comment
Share on other sites

@DietmarNice tests. Of course vendors are lying about performance. Machines about 2010+ have only differences in GPUs which I need only for 4K video. CPUs are mostly same but another nm technology was used to assemble it. Yes, more changes can be found, like removing IDE, PCI etc..

First big boom will be with quantum computers (powered by small fuse reactors) :D

Link to comment
Share on other sites

  • 2 weeks later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...