2014-04-13 23 views
16

sự khác biệt giữa con đường bắt đầu bằng \??\ và những người bắt đầu bằng \\?\Đường dẫn tiền tố ?? và \

Tại Windows 7 là gì CMD-Line

  • DIR cung cấp cho: \??\Volume{00000000-0000-0000-0000-000000000000}\
  • DANH SÁCH TẬP ĐOÀN WMIC cho \\?\Volume{00000000-0000-0000-0000-000000000000}\

Cảm ơn

Thông tin bổ sung:
Tôi đã tạo một thư mục trên ổ đĩa hệ thống nơi tôi đặt tất cả các điểm gắn kết của mình vào. Vì vậy, trước tiên tôi đã thực hiện một số MD C:\HDDs, sau đó là MD C:\HDD\Drive1, MD C:\HDD\Drive2 ... cho tất cả các ổ đĩa của mình. Sau khi gắn ổ đĩa vào những thư mục trống đó, tôi có thể thấy GUID bằng cách chuyển sang Thư mục đó với CD /D C:\HDDs và phát hành lệnh DIR. Có lẽ tôi phải phát hành một số nội dung ẩn, chỉ trong trường hợp các điểm gắn kết là các thư mục ẩn ...

+3

Không tắt chủ đề. Chỉ quan tâm đến người lập trình. –

+0

Ngữ cảnh là gì? \ ?? đường dẫn trình quản lý đối tượng NT và \\ là gì? là ký hiệu đường dẫn thô được sử dụng để vượt qua giới hạn độ dài đường dẫn/mở rộng –

+0

@AlexK: Tôi tin rằng đó là '\\. \' không '\\? \'? –

Trả lời

7

\?? là thư mục đối tượng ảo của hạt nhân, trong đó trình quản lý đối tượng tìm kiếm các liên kết biểu tượng thiết bị DOS cục bộ và toàn cục. Đầu tiên nó kiểm tra các liên kết thiết bị DOS cục bộ cho phiên đăng nhập của người dùng trong \Sessions\0\DosDevices\[Logon_AuthenticationId]. Sau đó, nó kiểm tra các liên kết thiết bị DOS toàn cầu trong \Global??. Quay trở lại những ngày xưa, NT đã sử dụng một thư mục \DosDevices. Ngày nay, \DosDevices là một liên kết đến \??. Ngoài ra, mỗi thư mục thiết bị DOS cục bộ có liên kết "Toàn cầu" để cho phép truy cập thiết bị toàn cầu khi thiết bị cục bộ đổ bóng toàn cục (ví dụ: \\?\Global\Z:) hoặc cho phép trình điều khiển thiết bị tạo thiết bị toàn cầu khi không thực hiện trong chuỗi hệ thống.

Trong chế độ người dùng, thư viện thời gian chạy trong ntdll.dll biến đổi một con đường DOS/Windows đầy đủ điều kiện để một con đường NT bởi một trong hai prepending \??\ cho một ký tự ổ đĩa hoặc thay thế hàng đầu \\ của một con đường UNC với \??\UNC\ - trừ \\?\\\.\ đường dẫn thiết bị cục bộ được thay thế đơn giản bằng \??\. Nhưng trước tiên, đường dẫn thiết bị \\.\ trải qua một số quá trình tiền xử lý, chẳng hạn như giải quyết "." và thành phần "..", trong khi \\?\ bỏ qua tất cả xử lý trước chế độ người dùng.

Ví dụ: thông thường \\?\C:\Windows được chuyển thành \??\C:\Windows, giải quyết thành \Global??\C:\Windows. Thiết bị DOS "C:" ổ đĩa chữ là một liên kết tượng trưng cho thiết bị âm lượng NT. Mục tiêu cuối cùng phụ thuộc vào hệ thống. Ví dụ: đường dẫn NT cuối cùng có thể giải quyết thành \Device\HarddiskVolume2\Windows.

Các liên kết thiết bị DOS như Volume{00000000-0000-0000-0000-000000000000} được tạo bởi trình quản lý điểm gắn kết. Chúng là keo giữa các ký tự ổ đĩa liên tục, các điểm gắn kết NTFS và thiết bị âm lượng NT hiện đang được sử dụng, chẳng hạn như \Device\HarddiskVolume2.

5

Như tôi có thể thấy, cả \\?\\??\ tham chiếu đến không gian tên thiết bị DOS cục bộ, nhưng hợp lệ trong các ngữ cảnh khác nhau.

\\?\ chỉ có ý nghĩa với Win32 chứ không phải hạt nhân, ngoại trừ trong một số trường hợp đặc biệt (ví dụ, khi xử lý điểm giao nhau) hạt nhân sẽ dịch đường dẫn Win32 trở lại đường dẫn hạt nhân khi cần.

\??\ có ý nghĩa đối với cả hạt nhân và Win32, tuy nhiên hầu hết các ứng dụng Win32 (bao gồm cả cmd.exe) đều không hiểu.

Trong ví dụ OP cụ thể: điểm giao nhau và điểm gắn kết có thể chứa đường dẫn Win32 hoặc hạt nhân, nhưng thường chứa đường dẫn hạt nhân và dir chỉ trình bày nội dung thô mà không sửa đổi. WMIC có lẽ là cố ý chuyển đổi đường dẫn hạt nhân thành một đường dẫn Win32, hoặc đang nhận dữ liệu từ một hàm API làm như vậy.

Các vấn đề liên quan