posted by 블르샤이닝 2013. 8. 5. 17:04
728x90
분서할떄 편하게~~API값을 토대로 드라이버 로드값을 참고해두자~

로컬 드라이브 알아내기  WINAPI 

2007/07/17 13:56

복사http://blog.naver.com/windslime/80040359840

전용뷰어 보기

자신의 로컬 시스템에 몇 개의 어떤 이름의 드라이브가 있는지를 찾는 함수는

GetLogicalDrives 함수와 GetLogicalDriveStrings 함수이다.

 

DWORD WINAPI GetLogicalDrives(void);

 

[Return]

성공시 드라이브 관련 정보 비트 값을 성정한 DWORD 값, 실패시 0을 반환한다.

 

DWORD WINAPI GetLogicalDriveStrings(
  DWORD nBufferLength,
  LPTSTR lpBuffer
);

 

DWORD nBufferLength

lpBuffer의 최대 크기. 이 크기는 종료문자를 포함하지 않은 크기이다.

만약 이 값이 0이라면 lpBuffer 는 사용되지 않는다.

 

LPTSTR lpBuffer

드라이브 이름을 받을 문자열.

 

[Return]

성공시 버퍼에 들어가 있는 문자열의 길이, 실패시 0을 반환한다.

 

위의 두 함수는 같은 기능을 하지만 얻어진 값의 사용법이 다르다.

 

GetLogicalDrives 함수는 DWORD형의 리턴 값을 받는다.

이 리턴 값의 최하위 1비트를 A 드라브로 해서 1비트씩 자릿수를 올려가면서

해당 드라이브가 있으면 해당 비트를 1로 셋팅하고 없으면 그 비트를 0으로 세팅한다.

 

ex) 시스템에 A, C, D, E, H 드라이브가 있다고 가정하면

GetLogicalDrives  함수의 리턴 값은

 

0000 0000 0000 0000 0000 0000 1001 1101

 

해서 0x9D 또는 157이 될 것이다.

 

 

GetLogicalDriveStrings 함수는 버퍼의 크기와 버퍼를 넘겨서 그 버퍼에

드라이브 문자를 받아 온다. 단지, 드라이브 이름과 드라이브 이름 사이에

널 종료문자가 위치해서 조금의 주의를 해줘야 한다.

 

ex) 시스템에 A, C, D, E, H 드라이브가 있다고 가정하면

GetLogicalDriveStrings 함수 성공시 버퍼는

 

Buffer[0] 부터

 

A : \ 0 

C : \ 0 

D : \ 0 

E : \ 0 

H : \ 0 0

순으로 들어간다.

 EX : A = 1, B = 2, C = 4, D = 8...의 형태로 하여 Long 값을 가져오던데, 

이 함수의 리턴 값은 가장 마지막 널 종료문자 위치인 20이 된다.


728x90

'시스템 해킹' 카테고리의 다른 글

힙 스프레이 공격  (0) 2014.03.31
UAC 우회  (0) 2014.01.29
시스템 정보를 보여주는 툴  (0) 2013.02.12
ker32.dll의 메모리 영향에 대한 이야기  (0) 2012.10.30
windows 8 의 보안기능  (0) 2012.09.12