How to do 64bit in 32bit winXP?

Hi All,

I’m running the 32 bit WinXP SP2 on an AMD athlon 64bit box,
the PAE mode was enabled. From WinDBG, I can see the address
like this:

kd> !pte 139430
VA 00139430
PDE at 00000000C0600000 PTE at 00000000C00009C8
contains 0000000012EC7067 contains 0000000015E06067
pfn 12ec7 —DA–UWV pfn 15e06 —DA–UWV

But when running XP SP2 on the 32bit box,
kd> !pte 804e3b25
VA 804e3b25
PDE at C0300804 PTE at C020138C
contains 0003D163 contains 004E3121
pfn 3d -G-DA–KWV pfn 4e3 -G–A–KRV

My question is, WinDBG(32bit) knew the target address actually
is a 64bit address and the PDE/PTE are all showed in 64 bit, how
can I get this 64bit information in my 32bit device driver? any kernel
APIs or embedded assembly instructions?

Thanks in advance,

AFei

I think, if you enable PAE on the 32-bit box (which may only be possible if
you have Windows 2003 Server Enterprise or Datacenter), it will also show
you 64-bit addresses on the PTE command.

Certainly, the PAE bit is key to what WinDBG does, there is no magical
things that make a AMD64 machine any different in 32-bit mode (aside from
the fact that if you really know what you’re doing, you can make it run
64-bit code…).

Kernel calls that deal with physical addresses, such as
MmGetPhysicalAddress or MmMapIoSpace uses a data-type PHYSICAL_ADDRESS that
is a 64-bit integer (defined using LARGE_INTEGER). So you shouldn’t need to
know whether it’s a 32-bit or 64-bit address in the PTE/PDE, just use he
OS-functions that are already there, and that are 64-bit capable (if the
rest of the system is set to a 64-bit capable mode, i.e. PAE or 64-bit
mode).


Mats

xxxxx@lists.osr.com wrote on 01/27/2005 03:00:59 AM:

Hi All,

I’m running the 32 bit WinXP SP2 on an AMD athlon 64bit box,
the PAE mode was enabled. From WinDBG, I can see the address
like this:

kd> !pte 139430
VA 00139430
PDE at 00000000C0600000 PTE at 00000000C00009C8
contains 0000000012EC7067 contains 0000000015E06067
pfn 12ec7 —DA–UWV pfn 15e06 —DA–UWV

But when running XP SP2 on the 32bit box,
kd> !pte 804e3b25
VA 804e3b25
PDE at C0300804 PTE at C020138C
contains 0003D163 contains 004E3121
pfn 3d -G-DA–KWV pfn 4e3 -G–A–KRV

My question is, WinDBG(32bit) knew the target address actually
is a 64bit address and the PDE/PTE are all showed in 64 bit, how
can I get this 64bit information in my 32bit device driver? any kernel
APIs or embedded assembly instructions?

Thanks in advance,

AFei


Questions? First check the Kernel Driver FAQ at http://www.
osronline.com/article.cfm?id=256

You are currently subscribed to ntdev as: xxxxx@3dlabs.com
To unsubscribe send a blank email to xxxxx@lists.osr.com

ForwardSourceID:NT0000BAC2

You are right, it’s because of the PAE mode and no tricks there. Just cast
the 32bit pointer to 64bit, I got the correct result.
Thanks a lot.

“Mats PETERSSON” wrote in message
news:xxxxx@ntdev…
>
>
>
>
>
> I think, if you enable PAE on the 32-bit box (which may only be possible
if
> you have Windows 2003 Server Enterprise or Datacenter), it will also show
> you 64-bit addresses on the PTE command.
>
> Certainly, the PAE bit is key to what WinDBG does, there is no magical
> things that make a AMD64 machine any different in 32-bit mode (aside from
> the fact that if you really know what you’re doing, you can make it run
> 64-bit code…).
>
> Kernel calls that deal with physical addresses, such as
> MmGetPhysicalAddress or MmMapIoSpace uses a data-type PHYSICAL_ADDRESS
that
> is a 64-bit integer (defined using LARGE_INTEGER). So you shouldn’t need
to
> know whether it’s a 32-bit or 64-bit address in the PTE/PDE, just use he
> OS-functions that are already there, and that are 64-bit capable (if the
> rest of the system is set to a 64-bit capable mode, i.e. PAE or 64-bit
> mode).
>
> –
> Mats
>
> xxxxx@lists.osr.com wrote on 01/27/2005 03:00:59 AM:
>
> > Hi All,
> >
> > I’m running the 32 bit WinXP SP2 on an AMD athlon 64bit box,
> > the PAE mode was enabled. From WinDBG, I can see the address
> > like this:
> >
> > kd> !pte 139430
> > VA 00139430
> > PDE at 00000000C0600000 PTE at 00000000C00009C8
> > contains 0000000012EC7067 contains 0000000015E06067
> > pfn 12ec7 —DA–UWV pfn 15e06 —DA–UWV
> >
> > But when running XP SP2 on the 32bit box,
> > kd> !pte 804e3b25
> > VA 804e3b25
> > PDE at C0300804 PTE at C020138C
> > contains 0003D163 contains 004E3121
> > pfn 3d -G-DA–KWV pfn 4e3 -G–A–KRV
> >
> > My question is, WinDBG(32bit) knew the target address actually
> > is a 64bit address and the PDE/PTE are all showed in 64 bit, how
> > can I get this 64bit information in my 32bit device driver? any kernel
> > APIs or embedded assembly instructions?
> >
> > Thanks in advance,
> >
> > AFei
> >
> >
> >
> > —
> > Questions? First check the Kernel Driver FAQ at http://www.
> > osronline.com/article.cfm?id=256
> >
> > You are currently subscribed to ntdev as: xxxxx@3dlabs.com
> > To unsubscribe send a blank email to xxxxx@lists.osr.com
>
> > ForwardSourceID:NT0000BAC2
>
>