หากคุณใช้ไดรฟ์เครือข่ายที่แมปไว้ คุณอาจสังเกตเห็นว่ามันไม่แสดงในแอปที่รันด้วยสิทธิ์ผู้ดูแลระบบ (รวมถึง cmd และ PowerShell) การตั้งค่า User Account Control (UAC) เริ่มต้นไม่ได้อนุญาตให้เข้าถึงไดรฟ์เครือข่ายที่แมปไว้ (ผ่าน net use) จากแอปพลิเคชันที่รันในโหมด Elevated (Run as administrator) หมายความว่าเมื่อคุณรัน Command Prompt หรือ File Manager (เช่น Total Commander) ด้วยสิทธิ์ที่เพิ่มขึ้น พวกมันจะไม่แสดงตัวอักษรไดรฟ์ของโฟลเดอร์ที่แชร์และแมปไว้
เงื่อนไขที่ทำให้เกิดปัญหานี้
คุณอาจเผชิญปัญหานี้หากเงื่อนไขต่อไปนี้เป็นจริง:
- ไดรฟ์เครือข่ายถูกแมปในเซสชันของผู้ใช้ (ผ่าน GPO หรือด้วยตนเองผ่าน
net use); - UAC เปิดใช้งานบนคอมพิวเตอร์ (พารามิเตอร์ GPO User Account Control: Behavior of the elevation prompt for administrators in Admin Approval Mode ตั้งค่าเป็นค่าเริ่มต้น "Prompt for credentials");
- ผู้ใช้ปัจจุบันมีสิทธิ์ผู้ดูแลระบบท้องถิ่นบนคอมพิวเตอร์และรันแอปในโหมด "Run as administrator"
ในกรณีนี้ ไดรฟ์เครือข่ายจะแสดงใน Windows File Explorer และในแอปทั่วไป แต่จะไม่แสดงในแอปพลิเคชันใดๆ ที่รันในโหมด Elevated
ทำไมจึงเกิดขึ้น?
ลักษณะเฉพาะนี้เกี่ยวข้องกับกลไก UAC สำหรับผู้ใช้ที่มีสิทธิ์ผู้ดูแลระบบท้องถิ่น เรื่องคือเมื่อผู้ใช้ล็อกอิน ระบบจะสร้าง Access Token สองอัน: อันแรกให้สิทธิ์เข้าถึงด้วยสิทธิ์แอดมินที่ปิดใช้งาน (Filtered Access Token ซึ่งแอปส่วนใหญ่รันอยู่) และอันที่สองคือ Token แอดมินที่มีสิทธิ์เต็มในระบบ (แอปทั้งหมดที่ได้รับอนุญาตให้เพิ่มสิทธิ์โดย UAC จะรันในบริบทนี้)
คุณสามารถใช้คำสั่ง whoami /all ในสองเซสชัน cmd.exe (ปกติและ Elevated) ของผู้ใช้คนเดียวกันและเปรียบเทียบสิทธิ์ปัจจุบัน คุณจะเห็นว่ามันแตกต่างกันมาก ตารางต่อไปนี้แสดงความแตกต่างของกลุ่มความปลอดภัยและสิทธิ์ปัจจุบันในแต่ละเซสชัน
วิธีแก้ไข: EnableLinkedConnections
มีวิธีแก้ไขที่ง่ายกว่า โดยการเปลี่ยนแปลงใน Registry:
- เปิด Registry Editor (regedit.exe);
- ไปที่คีย์รีจิสทรี HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System;
- สร้างพารามิเตอร์ใหม่ (ประเภท DWORD) ชื่อ EnableLinkedConnections со значением 1;
- รีสตาร์ทคอมพิวเตอร์ (หรือรีสตาร์ทบริการ LanmanWorkstation ด้วยคำสั่ง:
get-service LanmanWorkstation | Restart-Service –Force, และล็อกอิน Windows ใหม่)
คุณสามารถทำการเปลี่ยนแปลงเดียวกันด้วยคำสั่งเดียว:
reg add "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System" /v "EnableLinkedConnections" /t REG_DWORD /d 0x00000001 /f
หรือด้วย PowerShell:
New-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System' -Name EnableLinkedConnections -Value 1 -PropertyType 'DWord'
หลังจากรีสตาร์ทคอมพิวเตอร์ ให้ตรวจสอบว่าผู้ใช้สามารถเห็นไดรฟ์เครือข่ายที่แมปไว้ในโปรแกรมที่รันด้วยสิทธิ์แอดมินได้ ข้อความย้อนกลับก็เป็นจริง: ไดรฟ์เครือข่ายทั้งหมดที่แมปในโหมด Elevated จะพร้อมใช้งานในเซสชันผู้ใช้ที่ไม่มีสิทธิ์พิเศษ
วิธีนี้ทำงานบน Windows ทุกเวอร์ชันตั้งแต่ Vista ถึง Windows 10/Windows Server 2019
วิธีการทำงาน
หลังจากคุณเปิดใช้งานพารามิเตอร์รีจิสทรี EnableLinkedConnections LanmanWorkstation และ LSA (lsass.exe) จะตรวจสอบ Access Token ที่สองที่เชื่อมโยงกับเซสชันของผู้ใช้ปัจจุบัน หากพบ Token นี้ รายการไดรฟ์เครือข่ายที่แมปไว้จะถูกคัดลอกจาก Token หนึ่งไปยังอีก Token หนึ่ง ดังนั้น ไดรฟ์เครือข่ายที่แมปในโหมดพิเศษจะมองเห็นได้ในโหมดปกติ และในทางกลับกัน
วิธีทางเลือก: Symbolic Link
คุณสามารถสร้าง Symbolic Link ไปยังโฟลเดอร์เครือข่ายที่แชร์เป้าหมายได้ เช่น:
mklink /D c:\docs \\dublin-fs1\docs
คุณสามารถเข้าถึงไดรฟ์นี้ได้ในโหมดปกติและ Elevated ทั้งสองโหมด ควรสังเกตว่าข้อเสียหนึ่งของวิธีนี้คือคุณเข้าถึงโฟลเดอร์ที่แชร์ในฐานะผู้ใช้ปัจจุบัน ไม่สามารถใช้บัญชีของผู้ใช้อื่นได้เหมือนในกรณีของคำสั่ง net use
หลังจากเปิดใช้งานพารามิเตอร์ EnableLinkedConnections ไดรฟ์ที่แมปไว้จะพร้อมใช้งานจาก Scheduled Tasks ที่เปิดภายใต้ผู้ใช้ปัจจุบัน หากงานรันเป็น LocalSystem หรือผู้ใช้อื่น ไดรฟ์เครือข่ายที่แมปของผู้ใช้ปัจจุบันจะไม่พร้อมใช้งาน