Re: How to convert "\Device\HarddiskVolume1\" to "C:\"

Tech-Archive recommends: Fix windows errors by optimizing your registry



Arkady,

Sure, but that not suit all his his purposes as OP wrote from beginning

I just avoided mentioning QueryDosDevice() simply because the OP made
that clear that it supposedly does not work for him. Instead, I
proposed him a solution with ZwOpenSymbolicLinkObject() -
ZwQuerySymbolicLinkObject() pair , and he seems to be happy with it.
The funny part here is that
ZwOpenSymbolicLinkObject()-ZwQuerySymbolicLinkObject() pair, is, in
actuality, nothing more that just QueryDosDevice()'s internal
implementation - he is going to achieve *EXACTLY* the same results with
QueryDosDevice().....



Anton Bassov



Arkady Frenkel wrote:
Sure, but that not suit all his his purposes as OP wrote from beginning
Arkady

"Doron Holan [MS]" <doronh@xxxxxxxxxxxxxxxxxxxx> wrote in message
news:ez4n3rIMHHA.5016@xxxxxxxxxxxxxxxxxxxxxxx
in user mode you can just use QueryDosDevice to get the mapping without
using undocumented user mode APIs.

d

--
Please do not send e-mail directly to this alias. this alias is for
newsgroup purposes only.
This posting is provided "AS IS" with no warranties, and confers no
rights.


"Arkady Frenkel" <arkadyf@xxxxxxxxxxxxxxxx> wrote in message
news:ur0tK99LHHA.1252@xxxxxxxxxxxxxxxxxxxxxxx
You can use ZwQueryDirectoryObject() for "GLOBAL??" too.
You can see the results in WinObj.exe from sysinternals.com
Arkady

"Mario Beutler" <mario.beutler@xxxxxxxxxx> wrote in message
news:1167897103.865952.302420@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Anton, thank you for your clear answer!

Mario

anton bassov wrote:
If you need a generic solution that works in both kernel and user mode,
the whole things can be done like ZwOpenSymbolicLink() -
ZwQuerySymbolicLink() sequence for each drive letter (A;B;C;D,etc. If
the target volume is mounted on a partition of a basic disk, you will
get a string in the form "\Device\HarddiskVolumeX\...". If the target
volume is mounted on a partition of a removable USB disk, you will get
a string in the form "\Device\HarddiskX\DP(1)0-0+b\..." If the target
volume is a network drive, you will get a string in the form
"\Device\LanmanRedirector\ServerX\...". ). In other words, you have no
chance to miss your target string.


If you want a solution that works only in the kernel mode, you can
check IoVolumeDeviceToDosName() (or RtlVolumeDeviceToDosName(), if you
want your code to run on W2K as well ) documentation on MSDN....


Anton Bassov

Mario Beutler wrote:
Hello,

How to convert the following full file names into "normal" file
names:
\Device\HarddiskVolume1\windows\system32\lsass.exe
\Device\Harddisk5\DP(1)0-0+b\test.exe
\Device\LanmanRedirector\Server007\TEMP\test.exe

I need the "normal" file names like:
C:\windows\system32\lsass.exe
J:\test.exe (<-This is a USB drive.)
\\Server007\TEMP\test.exe

I tried GetVolumePathNamesForVolumeName,
GetVolumeNameForVolumeMountPoint, GetFullPathName and
QueryDosDevice -
but nothing seems to work for all cases (e.g. USB, network shares).
Any ideas? Thanks.

Mario






.



Relevant Pages

  • Re: unboxing problem
    ... all the correct type information and you wouldn't need to cast ... with a string or textboxes and labels for this. ... the code you posted will have to check the type of the target data structure every time you want to write something. ... This could be fixed by making the parameter passed by reference, but it's fairly awkward to do that with a variable length parameter list (essentially what you wind up doing is not taking advantage of the variable length semantics at all, instead passing an actual array you can get at later, modifying the element of interest in the array inside the method, and then in the code that called the method, copying any new values back out of the array after calling the method). ...
    (microsoft.public.dotnet.languages.csharp)
  • Unable to write data to the transport connection: An established connection
    ... /// A wrapper class for .NET 2.0 FTP ... public FTPClient(string Hostname, string Username, string Password) ... //copy the file specified to target file: target file can be full path or ... private string GetFullPath ...
    (microsoft.public.dotnet.languages.csharp)
  • Unable to write data to the transport connection
    ... /// A wrapper class for .NET 2.0 FTP ... public FTPClient(string Hostname, string Username, string Password) ... //copy the file specified to target file: target file can be full path or ... private string GetFullPath ...
    (microsoft.public.dotnet.languages.csharp)
  • Unable to write data to the transport connection: An established connection
    ... /// A wrapper class for .NET 2.0 FTP ... public FTPClient(string Hostname, string Username, string Password) ... //copy the file specified to target file: target file can be full path or ... private string GetFullPath ...
    (microsoft.public.dotnet.languages.csharp)
  • Unable to write data to the transport connection: An established connection
    ... /// A wrapper class for .NET 2.0 FTP ... public FTPClient(string Hostname, string Username, string Password) ... //copy the file specified to target file: target file can be full path or ... private string GetFullPath ...
    (microsoft.public.dotnet.languages.csharp)