관리 메뉴

History

[MFC] 컴퓨터 드라이브 정보 가져오기 본문

MFC/개인 실습

[MFC] 컴퓨터 드라이브 정보 가져오기

luckybee 2023. 1. 28. 17:06
728x90
반응형

드라이브 종류와 용량 정보를 나타내는 프로그램을 만들어 보기로 하자. 아래는 현재 내 컴퓨터에 있는 드라이브 및 디스크 용량 정보이다.

현재 사용자 pc의 디스크 및 드라이브 정보

우선 드라이버 및 디스크 정보를 가지고 오고 싶으면 API함수 GetLogicalDriveStrings함수를 이용해서 버퍼 시스템에서 유효한 드라이브를 지정하는 문자열로 채우는 함수이다.

 

함수의 원형은 아래와 같다.

DWORD GetLogicalDriveStringsW(
  [in]  DWORD  nBufferLength,
  [out] LPWSTR lpBuffer
);

[in] nBufferLength

lpBuffer가 가리키는 버퍼의 최대 크기이다. 이 매개 변수가 0이면 lpBuffer 가 사용되지 않는다.

 

[out] lpBuffer

시스템의 유효한 각 드라이브와 추가 null 문자를 포함하는 일련의 null로 끝나는 문자열을 수신하는 버퍼에 대한 포인터이다.

 

각 문자열은 디바이스 이름이다.

 

반환 값

버퍼에 복사된 문자열의 길이(문자)이다.

 

이제 GetLogicalDriveStrings를 사용해서 시스템 정보에 대한 문자열 길이를 읽어오고 이 정보를 바탕으로 반복문을 수행하여 사용자의 컴퓨터에 있는 모든 정보를 탐색할 것이다.  

 

한 개의 드라이브 명 문자열 길이는 4Byte이다. ex) L"C:\(null)" 그러므로 4개 문자씩 문자열의 포인터 위치를 증가시킨다.

 

그리고 GetDriveType 함수를 사용하여 GetLogicalDriveStrings에서 받아온 문자열의 정보가 어떤 드라이브인지

각 드라이브의 정보를 확인한다.

 

GetDriveType 함수는 디스크 드라이브가 이동식, 고정, CD - ROM, RAM 디스크 또는 네트워크 드라이브인지 여부를 확인한다.

 

함수의 원형은 아래와 같다.

UINT GetDriveTypeA(
  [in, optional] LPCSTR lpRootPathName
);

 

 

반환 값

반환 값은 다음 값 중 하나일 수 있는 드라이브 유형을 지정합니다.

반환 코드/값설명

 

DRIVE_UNKNOWN0 드라이브 유형을 확인할 수 없습니다.
DRIVE_NO_ROOT_DIR1 루트 경로가 잘못되었습니다. 예를 들어 지정된 경로에 탑재된 볼륨이 없습니다.
DRIVE_REMOVABLE2 드라이브에 이동식 미디어가 있습니다. 예를 들어 플로피 드라이브, 썸 드라이브 또는 플래시 카드 판독기입니다.
DRIVE_FIXED3 드라이브에 고정 미디어가 있습니다. 예를 들어 하드 디스크 드라이브 또는 플래시 드라이브입니다.
DRIVE_REMOTE4 드라이브는 원격(네트워크) 드라이브입니다.
DRIVE_CDROM5 드라이브는 CD-ROM 드라이브입니다.
DRIVE_RAMDISK6 드라이브가 RAM 디스크입니다.

 

이제 위에 있는 정보를 바탕으로 필자는 switch문으로 작성하여 각 문자열의 드라이브가 위의 반환값으로 들어왔는지 체크하면서 드라이브 용량을 계산했다.

 

디스크 용량을 받아오는 함수는 GetDiskFreeSpace함수를 이용해서 용량을 받아오고 계산을 진행했다. 

GetDiskFreeSpace함수의 도움말은 아래 블로깅한 링크를 남기겠다.

 

https://hard-go-head.tistory.com/entry/MFC-GetDiskFreeSpace-%ED%95%A8%EC%88%98-%EB%8F%84%EC%9B%80%EB%A7%90

 

[MFC] GetDiskFreeSpace 함수 도움말

https://learn.microsoft.com/ko-kr/windows/win32/api/fileapi/nf-fileapi-getdiskfreespacea?redirectedfrom=MSDN&f1url=%3FappId%3DDev16IDEF1%26l%3DKO-KR%26k%3Dk(FILEAPI%252FGetDiskFreeSpace)%3Bk(GetDiskFreeSpace)%3Bk(DevLang-C%252B%252B)%3Bk(TargetOS-Windows)%

hard-go-head.tistory.com

 

아래는 실행 결과이다.

프로그램으로 구현해서 디스크 및 드라이브 정보를 가져왔다.

 

728x90
반응형
Comments