2 poin oleh GN⁺ 2025-12-01 | 1 komentar | Bagikan ke WhatsApp
  • Di Windows, simbol atau karakter non-ASCII selain A~Z juga bisa digunakan sebagai huruf drive
  • Secara internal, path Win32 (C:\foo) diproses setelah diubah menjadi path namespace NT (\??\C:\foo)
  • Struktur ini dikelola oleh Object Manager, dan huruf drive seperti C: hanya ada sebagai objek symbolic link biasa
  • Dengan perintah subst, kita bisa membuat huruf drive nonstandar seperti +: atau €:, tetapi Explorer dan PowerShell tidak dapat mengenalinya
  • Perilaku ini menjadi petunjuk penting untuk memahami struktur internal pemrosesan path Windows dan cara encoding-nya (WTF-16, dll.)

Struktur internal huruf drive

  • Path biasa Windows (C:\foo) adalah path namespace Win32, dan saat API dipanggil akan diubah menjadi path namespace NT
    • Contoh: saat memanggil CreateFileW("C:\foo"), secara internal diubah menjadi NtCreateFile("\??\C:\foo")
  • \?? adalah folder virtual milik Object Manager, berupa gabungan \GLOBAL?? dan folder DosDevices per pengguna
  • Objek C: ada sebagai symbolic link di dalam \GLOBAL??, dan terhubung ke path perangkat nyata \Device\HarddiskVolume4
  • Karena itu, C: bukan karakter khusus yang dicadangkan, melainkan diperlakukan sebagai nama symbolic link biasa

Definisi huruf drive

  • Huruf drive adalah hasil dari proses konversi path Win32 menjadi path NT
    • Fungsi konversi RtlDosPathNameToNtPathName_U mengubah C:\foo menjadi \??\C:\foo
    Iklan
  • Fungsi ini juga menangani karakter nonstandar seperti +: dengan cara yang sama, jadi jika objek +: ada, path +:\ juga akan berfungsi normal
  • Objek +: yang dibuat dengan perintah subst +: C:\foo disimpan di folder DosDevices per pengguna

Perilaku huruf drive nonstandar

  • Explorer.exe hanya memindai rentang A~Z, jadi drive +: tidak akan ditampilkan
  • PowerShell juga tidak bisa mengenali drive non-ASCII dan akan mengembalikan error
  • Namun di cmd.exe, drive seperti +: atau €: berfungsi normal

Huruf drive non-ASCII dan Unicode

  • Dengan perintah subst €: C:\foo, kita bisa membuat drive dengan simbol euro (€)
    • Bekerja tanpa membedakan huruf besar/kecil (Λ: dan λ: dikenali sama)
  • Huruf drive dibatasi pada satu unit kode WTF-16 tunggal (U+FFFF ke bawah)
    • Karakter seperti 𤭢: yang melampaui U+FFFF akan memicu error di subst
    • Jika MountPointManager dipanggil langsung, pembuatan memang bisa berhasil, tetapi tidak bisa diakses karena konversi path Win32 gagal
  • Ini menunjukkan bahwa Windows tidak sepenuhnya mendukung pasangan surrogate UTF-16
Iklan

Masalah penentuan path dan encoding

  • Implementasi penanganan path di tiap bahasa bisa berbeda dari RtlDosPathNameToNtPathName_U
    • Contoh: Rust hanya mengenali A-Z sebagai path absolut (C:\ = true, +:\ = false)
  • Bergantung pada cara encoding (WTF-8 vs WTF-16), indeks seperti path[0], path[1], dan seterusnya bisa berbeda, sehingga hasil penentuan path absolut juga bisa berbeda
  • Standard library Zig mempertimbangkan perbedaan ini dan diimplementasikan agar mengenali hingga rentang <= U+FFFF

Bug penanganan non-ASCII di SetVolumeMountPointW

  • Saat memanggil SetVolumeMountPointW("€:\", volume), pemanggilan berhasil, tetapi link yang benar-benar dibuat muncul sebagai ¬:
  • Hal ini diduga karena 0x20AC (€) terpotong dan disimpan sebagai 0xAC
  • Ini adalah contoh yang menunjukkan keterbatasan API dalam menangani huruf drive non-ASCII

Kesimpulan

  • Secara internal, Windows tidak membatasi huruf drive pada A~Z
  • Pembatasan muncul karena perbedaan implementasi pada alat level lebih tinggi seperti Explorer dan PowerShell
  • Dengan memahami struktur konversi antara namespace Win32 dan NT, pemrosesan encoding, serta cara kerja Object Manager, kita bisa memahami mekanisme internal sistem file Windows dengan lebih dalam

1 komentar

 
GN⁺ 2025-12-01
Komentar Hacker News
  • Path NT adalah cara Object Manager mereferensikan resource
    Misalnya HKEY_LOCAL_MACHINE adalah alias dari \\Registry\\Machine
    NT mirip Unix karena menggunakan namespace VFS global
    Path yang diawali huruf drive adalah “DOSPath” untuk kompatibilitas DOS, dan beberapa subsistem masih memakainya bahkan di mode kernel
    Di PowerShell, berbagai resource dapat diekspos sebagai “drive”, dan selain drive bawaan seperti hklm:\, Anda juga bisa membuat drive kustom
    Dokumentasi terkait: sampel pengelolaan PowerShell Drive
    Di Linux/Bash, sertifikat tidak bisa diakses sebagai path file, tetapi di PowerShell/Windows hal itu memungkinkan
    Disarankan memasang modul PowerShell NtObjectManager lalu menjelajah dengan ls NtObject:\
    tautan modul

    • Mengejutkan bahwa setelah 30 tahun Windows masih terikat pada struktur direktori ala 80-an. Padahal floppy drive pun sudah tidak ada
    • Dengan memakai provider PSDrive dari PnP PowerShell, SharePoint Online juga bisa dijelajahi seperti drive
      dokumentasi Connect-PnPOnline
    • Di Linux juga sertifikat bisa diakses sebagai file melalui /usr/share/ca-certificates atau /etc/ssl/certs
      Hanya saja tidak seintegrasi Windows Registry
    • ReactOS punya browser NT Object sehingga seluruh hierarki Registry bisa dijelajahi lewat GUI
      Itu juga berjalan di Windows
      contoh ReactOS NT Object Browser
    • Di Linux pun sertifikat bisa diakses sebagai file biasa
      Anda dapat langsung melihat file PEM di bawah /etc/ca-certificates/extracted/cadir
  • Windows bisa mengakses partisi tanpa huruf drive
    Seperti Linux, partisi bisa di-mount di bawah direktori, dan dapat diatur dengan perintah PowerShell Add-PartitionAccessPath
    Tetap bertahan setelah reboot

    • Saya pernah memakai fitur ini untuk mengakali path instalasi game ke kartu SD
      Installer menolak kartu SD, tetapi bisa dikelabui dengan NTFS mount point
      Namun beberapa installer memeriksa ruang kosong pada disk induk sehingga jadi bingung
      Untuk mount permanen, symbolic link lebih berguna
    • Bahkan tanpa PowerShell, pengaturan ini bisa dilakukan lewat alat Disk Management melalui menu “ubah huruf drive dan path”
    • NTFS mount point berguna untuk mengakali perangkat lunak yang tidak bisa dikustomisasi path-nya
      Disk VM dengan kebijakan performa berbeda bisa digabung ke dalam satu path
    • Namun ini hanya berlaku antar-NTFS. exFAT atau ReFS tidak didukung
      Saat membuat partisi di GUI, Anda dapat memilih “mount ke path” alih-alih “tetapkan huruf drive”
    • Beberapa program (misalnya Steam) bisa menolak instalasi karena memeriksa ruang kosong pada disk induk
  • Huruf drive seperti €:\ adalah contoh yang terkutuk tapi keren
    Kernel NT jauh lebih fleksibel daripada yang terlihat oleh pengguna

    • Kebanyakan orang hanya mengenal kulit DOS dari Windows NT
      Di dalamnya tersembunyi struktur kompleks berbasis pemetaan GUID
      Misalnya, jika membuat shortcut bernama {GUID}, itu kadang tersambung ke fungsi tersembunyi
      Struktur seperti ini juga membuat Windows bisa menjadi sarang malware
    • Bergantung pada code page, huruf drive semacam ini bahkan bisa mustahil diakses
    • Kalau benar-benar fleksibel, huruf drive seharusnya bisa memakai emoji
  • File Explorer tidak mengenali huruf drive selain A~Z
    Karena itu mimpi untuk mengganti semua huruf drive menjadi emoji tidak mungkin terwujud

    • Sebagian besar emoji tidak direpresentasikan sebagai satu code unit UTF-16, jadi terbatas
    • Beberapa emoji senyum mungkin bisa tergantung code page
      Namun lebih baik mengganti ikon drive menjadi emoji lewat autorun.inf, dan labelnya juga bisa diberi emoji
    • Nama komputer bisa memakai emoji
  • Di era Win9x, trik ALT + 255 bisa dipakai untuk membuat folder yang tidak bisa diakses dari Explorer

    • Dengan cara itu saya dulu sering menyembunyikan Duke Nukem di komputer asrama
    • Sampai belum lama ini, cara serupa juga bisa dipakai untuk memblokir akses ke kunci Registry
    • Sekarang malah lebih parah. contoh kerentanan keamanan Windows 10/11
  • Di lingkungan pengembangan Xbox 360, huruf drive berbentuk string
    Contoh: Game:\foo, Hdd0:\foo

    • Ya, itu benar-benar ada
      Emulator Xenia menanganinya sebagai virtual file system berbasis symbolic link
      contoh kode Xenia
  • Di Linux ada konsep serupa berupa Abstract Domain Socket
    Ini adalah Unix domain socket yang karakter pertamanya NUL(\0), sehingga bisa melewati batasan izin
    Ini dipakai di game server untuk memisahkan resource tiap pemain sambil tetap menjaga komunikasi

    • Socket tersebut juga bisa ditemukan di /proc/net/unix
  • Fitur seperti ini terdengar seperti lingkungan yang cocok untuk membuat malware
    Sepertinya sistem bisa dikacaukan dengan mount tersembunyi atau nama drive aneh

    • Namun pada praktiknya, path NT harus dipetakan ke volume nyata, jadi sulit untuk benar-benar menyembunyikannya
    • Anda akan lebih terkejut lagi jika tahu Alternate Data Streams
    • Memanipulasi drive memerlukan hak administrator
  • Jika harus me-mount banyak image disk, huruf drive jadi sangat membingungkan
    Misalnya, jika me-mount 36 ISO DVD, Anda akan mengalami neraka tanda kutip command line

  • Di DOS lama (mungkin versi 3.3), huruf drive setelah Z adalah AA
    Saya pernah memastikannya dengan membuat beberapa RAM drive kecil

    • Saya juga ingat bahwa di Netware, pemetaan drive yang melewati Z juga dimungkinkan