Post List

2015년 1월 15일 목요일

C++ Windows에서 하드드라이브 정보 읽어오기 : GetVolumeInformation


MSDN에 보면 GetVolumeInformation라는 함수를 찾아 볼수 있다.

함수는 아래와 같이 생겼다.

BOOL WINAPI GetVolumeInformation(
  _In_opt_   LPCTSTR lpRootPathName,
  _Out_opt_  LPTSTR lpVolumeNameBuffer,
  _In_       DWORD nVolumeNameSize,
  _Out_opt_  LPDWORD lpVolumeSerialNumber,
  _Out_opt_  LPDWORD lpMaximumComponentLength,
  _Out_opt_  LPDWORD lpFileSystemFlags,
  _Out_opt_  LPTSTR lpFileSystemNameBuffer,
  _In_       DWORD nFileSystemNameSize
);
자세한 설명은 아래 MSDN 페이지를 참고하면 된다.



사용 예제는 아래를 참고하면 된다.

#include <atlstr.h>
#include <iostream>

using std::wcout;
using std::endl;

int _tmain(int argc, _TCHAR* argv[])
{
        _TCHAR buffer[256] = { 0, };
        CString DrivePathName;
        int n = 0;
        _TCHAR DriveName[100];
        _TCHAR FileSystem[100];
        LPCTSTR    drivename;
        GetLogicalDriveStrings(256, buffer);
        DWORD lVolumnSerialNumber;

        while (buffer[n] != NULL)
        {
               for (int i = 0; i < sizeof(*(buffer + n)); i++)
               {
                       DrivePathName = buffer + n;
                       n += 4;

                       ZeroMemory(DriveName, sizeof(DriveName));
                       ZeroMemory(FileSystem, sizeof(FileSystem));
                       ZeroMemory(&drivename, sizeof(drivename));

                       GetVolumeInformation(DrivePathName, DriveName, 1024,
                           &lVolumnSerialNumber, NULL, NULL, FileSystem, 1024);

                       wcout << "Path                 : " << DrivePathName.GetBuffer() << endl;
                       wcout << "DriverName           : " << DriveName << endl;
                       wcout << "FileSystem           : " << FileSystem << endl;
                       wcout << "Volumn Serial Number : ";
                       printf("%X\n\n", lVolumnSerialNumber);
               }
        }
        return 0;
}

참고로 Unicode로 Project를 만들어서 wcout 를 사용하였다.

댓글 없음:

댓글 쓰기