Booting XP(E) via a USB to PCI slotcard



Hi all,

I try to describe, why until now XP cant boot or been installed and run
via a USB to PCI slotcard.
I think, that this can be overcome, but only with very very hard

I hope this is the only thing, why it not works, but I believe that.

You all remember the picture from dennis123123 in post

I now know the exact reason of this:
There is simple no arcpath for the USBdrive, like

multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP

I tested this with the recovery console from XP CD and type there map
No arcpath can be seen at the compi from dennis123123.
Now I tried the following: On another computer with the same USB
after typing map arc, I saw a wonderfull arcpath

multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP

for this USB harddisk. Now it is clear for me: If the Bios does not
recognice a harddisk at boottime,
the silly XP(E) is never able to repair this error, because in the
disk.sys driver there is no implementation of IoAssignArcName(), that

What a pain for Microsoft:
I can install and boot Win98 via the USB to PCI slotcard to any USB
device using the Iomega driver.

I did another test to be sure. I installed the recovery console to a
normal IDE harddisk.
I changed in its folder (cmdcons) the against the modified
Then I imported to registry the hive of the
I modified there all the USB* entries as for USB boot wished.
I copied this hive as otto back and renamed it again .

Then I openend there txtsetup.sif and did all the changes as on XP
Slipstream CD for install on USB.

Then I connected the USB harddisk via USB to PCI slotcard and booted
the modified recoveryconsole from
normal harddisk: Typing map arc there, shows me again only the
arcpathes of the normal harddrive.

And the last test: I run Winobj.exe from normal Windows XP: Voila, no
arcpath can be seen for the connected USB harddisk via USB to PCI

To make it clear:
I always can see the files and folders on the USB harddisk, connected
via the USB to PCI slotcard.
But there is no arcpath for that USB harddisk, I only saw always
for that USB harddisk.

Puh ...but now I see clear, what has to be done :

There is a file called arcname.c from Reactos.

This driver arcname.sys has to start direct before disk.sys starts.

It simple translates the arcpath, asking ntoskernl.exe and give the
right arcpath to the waiting disk.sys.

This file has to be compiled for XP.

Perhaps it works also compiled for NT4, as Reactos did. Compiling for
XP isnt easy, because for example
it makes use of ntoskrnl.h, that isnt in the XP library. So you also
have to build a new library, that looks like
that from Reactos. But this will work, I am sure.
Another idea, that can be tested easy: There are special disk.sys from
Microsoft ,
called sometimes scsidisk.sys. Perhaps you are able to get one, with an
inbuild IoAssignArcName() routine.

I found one, but that gives blue screen about after 12 Seconds starting
for USB boot.

I think, that here are a lot of people, who understand what I am
writing and so they can help.

Nice to hear from you


Hi all,
does anybody know,

where IoAssignArcName() stores its values (in a buffer or the pointer
to that buffer) for


in Unicode this must be


I have a simple idea, and that are most the best

FAKE simple the Arcpath (Arcname) with the value above for the device,
which is noted (where?!) after\ntldr detection as


that is in Unicode


simply by writing the first Unicode String to ram.

I dont understand, where these values have to stay that are mentioned

Nice to hear from you

EDIT: This side put my real Unicode String back to ASCII,...grr.
so it cant be seen anymore as Unicode.


Hi all,

you can begin to count hours, when booting XP(E) via a USB to PCI
slotcard will work.

When formulating as good as possible my own last question about faking
IoAssignArcName() here to the forum, I suddenly found its solution. It
is sooo easy.

Here is the C-source code for my driver arcname.sys, just written in 5
(hihi... computers are no humans, you can make them think what ever you
want )

#include <ntddk.h>

WCHAR DeviceNameBuffer[80];

WCHAR ArcNameBuffer[80];



RtlInitUnicodeString (&ArcName,



IoAssignArcName (&ArcName,


Do you think this will work?

This can easiest be compiled for NT4, Win2000, Win SP1, SP2 and Windows
2003, and Vista and Embedded SP1, SP2 and Reactos.

And one problem more is gone: I thought, that it may be a problem, to
make this driver start, just before disk.sys starts, not that the silly
XP(E) noticed, that it was faked and tries to zero some values:

I found in the WinDDK the source code for disk.sys.
I only need to put the few lines of my driver direct before the source
code of disk.c and compile them together.
And there is no chance left, that after that XP(E) has a (faked
Yippiehh) arcpath for the USB harddisk,
connected via my USB to PCI slotcard. Whether the new driver disk.sys
works, can be testet at once:
Even if XP(E) starts as normal from a IDE harddisk, if there is a USB
to PCI slotcard with a USB harddisk connected, there is no Arcpath for
that USB harddisk. Klicking on Winobj.exe, shows you at once
and brutal, whether the new driver disk.sys gives this USB harddisk a
Arcpath or not.

The only thing left, that I have to solve then, is the egg-chicken
problem: One day ago I thought, that with the recovery console you cant
start any program: But then I tested the command batch .
So you can run any program via the Recovery Console, simply hided in a
batch file.

Nice to hear from you

PS: Now I know: The blue screen with BSOD 0x7b is in most cases,
because my arcname.sys driver isnt build in, in disk.sys. And that does
Microsoft not know???

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question