关于磁盘盘符的问题
2007-02-04 17:23
267 查看
关于磁盘盘符,以下代码应该有用
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
TCHAR szHello[MAX_LOADSTRING];
LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING);
switch (message)
{
case WM_DEVICECHANGE:
Proc_WM_DEVICECHANGE(wParam,lParam);
break;
。。。。。。。。。。。。。。。。。。。。。。
void Proc_WM_DEVICECHANGE(WPARAM wParam, LPARAM lParam)
{
PDEV_BROADCAST_HDR lpdb = (PDEV_BROADCAST_HDR)lParam;
switch(wParam)
{
case DBT_DEVICEARRIVAL:
if (lpdb ->dbch_devicetype == DBT_DEVTYP_VOLUME)
{
PDEV_BROADCAST_VOLUME lpdbv = (PDEV_BROADCAST_VOLUME)lpdb;
TCHAR DiskLetter[32];
DecodeDiskLetter(lpdbv->dbcv_unitmask, DiskLetter, 32);
_tcscat(DiskLetter, "://");
TCHAR VolumeName[MAX_PATH] = {0};
if(!GetVolumeNameForVolumeMountPoint(DiskLetter, VolumeName, MAX_PATH))
{
sprintf(VolumeName, "Err %d", GetLastError());
MessageBox(NULL, VolumeName, "GetVolumeNameForVolumeMountPoint", MB_OK);
}
if(!DeleteVolumeMountPoint(DiskLetter))
{
sprintf(VolumeName, "Err %d", GetLastError());
MessageBox(NULL, VolumeName, "DeleteVolumeMountPoint", MB_OK);
}
if(!SetVolumeMountPoint(_T("H://"), VolumeName))
{
sprintf(VolumeName, "Err %d", GetLastError());
MessageBox(NULL, VolumeName, "SetVolumeMountPoint", MB_OK);
}
}
break;
}
}
void DecodeDiskLetter(DWORD Mask, PTCHAR pOutBuffer, int outlen)
{
DWORD ecx = 0;
DWORD eax = 0;
while(ecx < 26)
{
DWORD esi = 1;
if(Mask & esi<<ecx)
{
*(pOutBuffer+eax) = (TCHAR)(ecx+_T('A'));
eax++;
}
ecx++;
}
*(pOutBuffer+eax) = _T('/0');
}
另外服务中应该注册guid,以上时通过窗口接受的
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
TCHAR szHello[MAX_LOADSTRING];
LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING);
switch (message)
{
case WM_DEVICECHANGE:
Proc_WM_DEVICECHANGE(wParam,lParam);
break;
。。。。。。。。。。。。。。。。。。。。。。
void Proc_WM_DEVICECHANGE(WPARAM wParam, LPARAM lParam)
{
PDEV_BROADCAST_HDR lpdb = (PDEV_BROADCAST_HDR)lParam;
switch(wParam)
{
case DBT_DEVICEARRIVAL:
if (lpdb ->dbch_devicetype == DBT_DEVTYP_VOLUME)
{
PDEV_BROADCAST_VOLUME lpdbv = (PDEV_BROADCAST_VOLUME)lpdb;
TCHAR DiskLetter[32];
DecodeDiskLetter(lpdbv->dbcv_unitmask, DiskLetter, 32);
_tcscat(DiskLetter, "://");
TCHAR VolumeName[MAX_PATH] = {0};
if(!GetVolumeNameForVolumeMountPoint(DiskLetter, VolumeName, MAX_PATH))
{
sprintf(VolumeName, "Err %d", GetLastError());
MessageBox(NULL, VolumeName, "GetVolumeNameForVolumeMountPoint", MB_OK);
}
if(!DeleteVolumeMountPoint(DiskLetter))
{
sprintf(VolumeName, "Err %d", GetLastError());
MessageBox(NULL, VolumeName, "DeleteVolumeMountPoint", MB_OK);
}
if(!SetVolumeMountPoint(_T("H://"), VolumeName))
{
sprintf(VolumeName, "Err %d", GetLastError());
MessageBox(NULL, VolumeName, "SetVolumeMountPoint", MB_OK);
}
}
break;
}
}
void DecodeDiskLetter(DWORD Mask, PTCHAR pOutBuffer, int outlen)
{
DWORD ecx = 0;
DWORD eax = 0;
while(ecx < 26)
{
DWORD esi = 1;
if(Mask & esi<<ecx)
{
*(pOutBuffer+eax) = (TCHAR)(ecx+_T('A'));
eax++;
}
ecx++;
}
*(pOutBuffer+eax) = _T('/0');
}
另外服务中应该注册guid,以上时通过窗口接受的
相关文章推荐
- ceph部署 关于osd磁盘选择以及激活问题
- 关于VMWare压缩虚拟机的虚拟磁盘的问题
- 关于Nginx均衡磁盘IO极高的问题
- 关于机房有八台计算出现E盘无法更改盘符的问题
- 关于重装系统中出现的无法找到磁盘和无法定位当前磁盘的问题
- 关于VSAN 6.x版本里一个针对SSD性能不足时的写入保护导致强行Unmount VSAN磁盘问题
- 关于磁盘空间占满问题
- 关于“no space left on device”(磁盘空间不足)问题
- 安装VS2008关于解决磁盘已满问题方案.
- vsphere6.0故障:关于linux版本的vcenter6.0磁盘爆满问题和503错误等问题探究
- 关于服务器磁盘空间占满问题
- 关于vitualBox创建共享磁盘的问题
- 安装VS2008关于解决磁盘已满问题方案.
- 安装VS2008关于解决磁盘已满问题方案.
- 关于装双Win7系统方法及问题:错误0x80070571:磁盘结构损坏且无法读取
- 关于CAS服务器磁盘占用的问题,锁定目录惹的祸
- 关于网络心跳与磁盘心跳超时多久会引发节点重启的问题
- U盘问题,插入时只有声音,没有显示,在”计算机管理”的“磁盘管理”中,上面看不到盘符”H:”,下面可以看到”磁盘1 可移动无媒
- 关于C++语言从磁盘里面读取浮点数据的问题
- new File(path)关于这个path的绝对与相对路径问题(ps部分 dos下切换盘符,user.dir解释)