Application/MFC

[MFC] 디스크 Offline / Online

devsalix 2023. 3. 22. 11:29
728x90

디스크 상태를 변경하고 싶다면 아래와 같이 함수를 작성하면 됩니다

 

#define IOCTL_DISK_SET_DISK_ATTRIBUTES      CTL_CODE(IOCTL_DISK_BASE, 0x003d, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
#define DISK_ATTRIBUTE_OFFLINE              0x0000000000000001

typedef struct _SET_DISK_ATTRIBUTES {
    ULONG Version;
    BOOLEAN Persist;
    BOOLEAN RelinquishOwnership;
    BOOLEAN Reserved1[2];
    ULONGLONG Attributes;
    ULONGLONG AttributesMask;
    GUID Owner;

} SET_DISK_ATTRIBUTES, *PSET_DISK_ATTRIBUTES;

BOOL DiskState(BOOL bOffLine)
{
	CString strDrive;
	strDrive.Format(_T("\\\\.\\PhysicalDrive0")); //0번 디스크
	
	HANDLE hDisk = CreateFile(strDrive,
		GENERIC_READ | GENERIC_WRITE,
		FILE_SHARE_READ | FILE_SHARE_WRITE, 
		NULL,
		OPEN_EXISTING,
		0,
		NULL);

	if(hDisk != INVALID_HANDLE_VALUE)
	{
		DWORD dwRet;
		SET_DISK_ATTRIBUTES disk_attr;
		ZeroMemory(&disk_attr, sizeof(disk_attr));

		disk_attr.Version = sizeof(SET_DISK_ATTRIBUTES);
		disk_attr.Attributes = (bOffLine ? DISK_ATTRIBUTE_OFFLINE : 0);
		disk_attr.AttributesMask = DISK_ATTRIBUTE_OFFLINE;
    
		DeviceIoControl(hDisk, IOCTL_DISK_SET_DISK_ATTRIBUTES, &disk_attr, disk_attr.Version, NULL, 0, &dwRet, NULL);
		CloseHandle(hDisk);

		return TRUE;
	}

	return FALSE;
}

 

 


제 글이 도움이 되셨다면 댓글 & 공감 부탁드려요 😀

 

 
728x90
반응형