자유 게시판

드라이브 마운트안된 파티션 내용에 접근과 유의할점.

2019.03.07 09:02

Neutrino 조회:487 추천:2

앞서 마운트없이 EFI 파티션에 bcdboot를 수행할수 있다는 글을 올렸는데요

모든 시스템에 인식된 모든 NTFS/FAT 파티션은 마운트에 상관없이 dir 명령으로 접근이 가능합니다. 

mountvol 결과 나오는 디바이스 트리 uuid 부터 경로를 적어주면 됩니다.

 

예 : dir \\?\Volume{ad843443-4ba4-4d58-9122-f5189d69328a}\efi

결과는

 

 \\?\Volume{ad843443-4ba4-4d58-9122-f5189d69328a} 드라이브의 볼륨: system
 볼륨 일련 번호: 0EC0-0A96

 \\?\Volume{ad843443-4ba4-4d58-9122-f5189d69328a}\efi 디렉터리

2019-02-23  오전 05:04    <DIR>          .
2019-02-23  오전 05:04    <DIR>          ..
2019-02-23  오전 05:04    <DIR>          Microsoft
2019-02-23  오전 05:04    <DIR>          Boot
               0개 파일                   0 바이트
               4개 디렉터리      76,914,688 바이트 남음

 

이렇게 잘 나오네요. (내용은 관리자권한일때만 보여짐...)

따라서 bcdedit /store ... 에서도 위 디바이스 트리로부터 BCD 경로를 적어주면 됩니다.

그런데 bcdboot /s 에서는 위의 디바이스 트리 외에 \Device\HarddiskVolume# 형식도 지원하고 (#은 번호)

그냥 # 번호만 써줘도 되는데 중요한건 이때 # 번호가 diskpart의 list vol 에서 나오는 볼륨번호와는 전혀 별개 입니다.

 

즉 diskpart list vol 의 숫자는 임의로 나열순서를 써놓은것일뿐 디바이스 트리와는 전혀 별개이기에 조심해야 합니다.

디바이스트리 의 볼륨은 0 이 아닌 1부터 시작하느것부터 다릅니다. 

 

\Device\HarddiskVolume 형식의 볼륨값은 파워쉘에서 다음의 코드를 봍여넣기 하면 나오지만

마운트 안된것은 나오지가 않습니다.

 

   $DynAssembly = New-Object System.Reflection.AssemblyName('SysUtils')
   $AssemblyBuilder = [AppDomain]::CurrentDomain.DefineDynamicAssembly($DynAssembly, [Reflection.Emit.AssemblyBuilderAccess]::Run)
   $ModuleBuilder = $AssemblyBuilder.DefineDynamicModule('SysUtils', $False)

   # Define [Kernel32]::QueryDosDevice method
   $TypeBuilder = $ModuleBuilder.DefineType('Kernel32', 'Public, Class')
   $PInvokeMethod = $TypeBuilder.DefinePInvokeMethod('QueryDosDevice', 'kernel32.dll', ([Reflection.MethodAttributes]::Public -bor [Reflection.MethodAttributes]::Static), [Reflection.CallingConventions]::Standard, [UInt32], [Type[]]@([String], [Text.StringBuilder], [UInt32]), [Runtime.InteropServices.CallingConvention]::Winapi, [Runtime.InteropServices.CharSet]::Auto)
   $DllImportConstructor = [Runtime.InteropServices.DllImportAttribute].GetConstructor(@([String]))
   $SetLastError = [Runtime.InteropServices.DllImportAttribute].GetField('SetLastError')
   $SetLastErrorCustomAttribute = New-Object Reflection.Emit.CustomAttributeBuilder($DllImportConstructor, @('kernel32.dll'), [Reflection.FieldInfo[]]@($SetLastError), @($true))
   $PInvokeMethod.SetCustomAttribute($SetLastErrorCustomAttribute)
   $Kernel32 = $TypeBuilder.CreateType()

   $Max = 65536
   $StringBuilder = New-Object System.Text.StringBuilder($Max)

   Get-WmiObject Win32_Volume | ? { $_.DriveLetter } | % {
       $ReturnLength = $Kernel32::QueryDosDevice($_.DriveLetter, $StringBuilder, $Max)

       if ($ReturnLength)
       {
           $DriveMapping = @{
               DriveLetter = $_.DriveLetter
               DevicePath = $StringBuilder.ToString()
           }

           New-Object PSObject -Property $DriveMapping
       }
   }

 

저는 다음과 같이 나오는데

 

DevicePath              DriveLetter
----------              -----------
\Device\HarddiskVolume2 C:
\Device\HarddiskVolume3 A:
\Device\HarddiskVolume5 Z:
\Device\HarddiskVolume6 B:

 

여기서 빠진 Volume 1과 Volume 4가 EFI 파티션 입니다. (diskpart list vol 에서는 전혀 다른 순서와 값이 나옴)

이 형식은 dir로 출력은 안되며 다소 고전적인 포맷이라 여겨지며 이유는 위에서 설명드린대로 볼륨순번이 중구난방 이기에

mountvol에서 얻은 \\?\Volume{uuid} 형식이 정상적인 포맷으로 간주되어 잘 쓰이는것 같습니다.

번호 제목 글쓴이 조회 등록일
[공지] 자유 게시판 이용간 유의사항 (정치, 종교, 시사 게시물 자제) [1] gooddew - -
34737 이곳 게시물 광고창에서 바이러스가 있나요? [5] 토니 1106 03-09
34736 이게 하나 생길거 같네요ㅎㅎ M.2 128gb [10] 강치 1191 03-09
34735 언론...공중파..마저 외면하고 있는 그녀를 지켜주세요 [8] 냇시조니 1573 03-08
34734 [영화] 그린 북(Green Book) 한글자막 발견 [6] Day 1320 03-08
34733 옛날 Dos게임 창고세가를 아시나요? [8] 【光海】 1030 03-08
34732 EasyDrv7 한글패치된 최신버전 찾고 있습니다. [13] 도파니 1336 03-08
34731 바다에 빠진 강아지를 구한 청년 [5] 한결맘 981 03-08
34730 PE 빌더 플러스 [40] %카리스마 2039 03-08
34729 일본의 하야부사2 소행성 탐사 위성 소행성 샘플 채취 성공 [6] asklee 819 03-07
34728 Windows10 Pro RS5 x64 Lite 17763.348 Util+EasySysprep [... [69] 메인보드 1766 03-07
34727 [프리뷰] Windows 10 버전1809 [17763.349] 누적 업데이트 ... [14] suk 1427 03-07
» 드라이브 마운트안된 파티션 내용에 접근과 유의할점. [1] Neutrino 487 03-07
34725 이미지 사이즈 정확히 뷰어 없을까요 [6] dsde 671 03-07
34724 중고거래 했다가 온종일 피곤하고 짜증나네요 [12] A_Kidd 2057 03-06
34723 라이젠1세대도 슬슬 놔줘야할때네요.ㅎ.. [11] bleach 1192 03-06
34722 RSImageX2.56.exe과 VHDman1.92.exe 나왔네요 [8] suk 1259 03-06
34721 10PE18845x64_C.iso [7] cungice 1471 03-06
34720 Windows 운영체제 에대하여 [5] 거스 1001 03-06
34719 오늘 공수해온 SSD 1T.. [4] bleach 1402 03-06
34718 다시금 봄이... [2] 솔로황제 512 03-06
XE1.11.6 Layout1.4.8