您的位置:首页 > 其它

关于磁盘盘符的问题

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,以上时通过窗口接受的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  磁盘 null callback path