DosPathToSessionPath
не задокументировано. Вот небольшой код C #, который использует DosPathToSessionPath
:
using System;
using System.Runtime.InteropServices;
namespace DosPathToSessionPath {
static class NativeMethods {
[DllImport ("kernel32.dll", CharSet = CharSet.Unicode)]
[return: MarshalAs(UnmanagedType.Bool)]
internal static extern bool DosPathToSessionPath (
uint sessionId, String pInPath, out IntPtr ppOutPath);
[DllImport ("kernel32.dll")]
internal static extern uint WTSGetActiveConsoleSessionId ();
[DllImport ("kernel32.dll", SetLastError = true, ExactSpelling = true)]
internal static extern IntPtr LocalFree (IntPtr hMem);
}
class Program {
static void Main (string[] args) {
uint sessionId = NativeMethods.WTSGetActiveConsoleSessionId ();
string filePath = @"C:\Program Files";
IntPtr ppOutPath;
bool statusCode = NativeMethods.DosPathToSessionPath (
sessionId, filePath, out ppOutPath);
if (statusCode) {
string outPath = Marshal.PtrToStringAuto (ppOutPath);
Console.WriteLine (outPath);
ppOutPath = NativeMethods.LocalFree (ppOutPath);
}
}
}
}
Не ясно, в каких ситуациях следует использовать эту функцию. Путь сеанса - это путь типа \Sessions\1\DosDevices\C:\Program Files
или C:\Users\Oleg\AppData\Local\VirtualStore\Program Files
?
Этот код вы видите в качестве отправной точки некоторых экспериментов. В настоящее время выходной путь DosPathToSessionPath
(ppOutPath
) всегда совпадает с входным путем.