学习文章:

http://blog.sina.com.cn/s/blog_5f0215c70100d3j7.html  

WINCE与WM的差异(1)-查询文件系统目录结构

 

MSDN :http://msdn.microsoft.com/zh-cn/office/ee490204  Storage Manager Functions (Windows Embedded Compact 7)

(msdn,我用的太悲剧了,每次都不能快速的在目录索引下找到WinCE的目录,但偶尔翻的翻的就不知道怎么翻到WinCE的目录了,7也是。。。)

HANDLE h_store;
STOREINFO StoreInfo;
StoreInfo.cbSize = sizeof(STOREINFO);
h_store = FindFirstStore(&StoreInfo);
if (h_store !=INVALID_HANDLE_VALUE)
{
    printf("查找Store成功 \n");
    printf("szDeviceName =%ls\n", StoreInfo.szDeviceName);
    printf("szStoreName =%ls\n", StoreInfo.szStoreName);
    printf("dwDeviceClass =%d\n", StoreInfo.dwDeviceClass);
    printf("dwDeviceType =%d\n", StoreInfo.dwDeviceType);
    printf("dwDeviceFlags =%d\n", StoreInfo.dwDeviceFlags);
    printf("dwPartitionCount =%d\n", StoreInfo.dwPartitionCount);
    printf("dwMountCount =%d\n", StoreInfo.dwMountCount);
    /*  szDeviceName =DSK1:
        szStoreName =EMULATOR SHARED FOLDER FS
        dwDeviceClass =2
        dwDeviceType =536870912
        dwDeviceFlags =1
        dwPartitionCount =1
        dwMountCount =1*/
    HANDLE h_openStore;
    h_openStore = OpenStore(L"DSK1:");
    HANDLE h_part;
    PARTINFO PartInfo;
    PartInfo.cbSize = sizeof(PARTINFO);
    h_part = FindFirstPartition(h_openStore,&PartInfo);
    //FindFirstPartition第一个参数是OpenStore的返回值,不能用FindFirstStore的返回值
    if (h_part !=INVALID_HANDLE_VALUE)
    {
        printf("查找第一个Store分区成功\n");
        do
        {
             
            printf("szPartitionName =%ls\n", PartInfo.szPartitionName);
            printf("szFileSys =%ls\n", PartInfo.szFileSys);
            printf("szVolumeName =%d\n", PartInfo.szVolumeName);
        } while (FindNextPartition(h_part,&PartInfo));
 
        /*szPartitionName =PART00
        szFileSys =VCEFSD.dll
        szVolumeName =324996*/
    }
    else
    {
        printf("查找第一个Store分区失败\n");
    }
 
    FindClosePartition(h_part);
 
}
 
if(FindNextStore(h_store,&StoreInfo))
{
    printf("不止唯一Store\n");
}
else
{
    printf("只有一个Store\n");
}
FindCloseStore(h_store);

  

输出的是模拟器的信息

还没结束,今天没时间测试了,也没机器,

工作的机器放资源的分区是隐藏的,每次放资源或程序的时候感觉忒麻烦。。尤其是心情烦躁的时候。

目标:做一个程序,一点击就修改注册表键值 ,将对应分区注册表隐藏设置为显示,然后卸载分区,再加载分区,应该会方便。

明天继续

---------------------------------------------------------------------------------------------------------------------------------

//将要显示的分区的注册表隐藏设置为假。

void CPartitionControlDlg::ChangeRegKeyValue()
{
    HKEY    hOpenKey;
    DWORD   dwKeyValueType = 0;
    DWORD   dwKeyValue;
    DWORD   dwKeyValueLength = sizeof(DWORD);
    if(ERROR_SUCCESS == RegOpenKeyEx( HKEY_LOCAL_MACHINE, L"System\\StorageManager\\Profiles\\Nand\\NANDFATFS",0, 0, &hOpenKey ))
    {
        long lResult = 0;
        lResult = RegQueryValueExW( hOpenKey, L"MountHidden", 0, &dwKeyValueType,(BYTE*)&dwKeyValue, &dwKeyValueLength);
        if(lResult ==ERROR_SUCCESS)
        {
            printf("读取注册表成功,achKey = %d\n",dwKeyValue);
            dwKeyValue = 0;
            RegSetValueExW(hOpenKey,L"MountHidden",0,dwKeyValueType,(BYTE*)&dwKeyValue,dwKeyValueLength);
             
        }
        else
        {
            printf("读取失败 :lResult = %d\n",lResult);
        }
         
            //RegSetValueEx(hKey, TEXT("Screen"), 0, dwType, (LPBYTE)&dwData, dwDataLen);
        RegCloseKey( hOpenKey );
    }
 
}

  

//卸载、加载指定分区

void CPartitionControlDlg::OnBnClickedButton2()
{
    // TODO: Add your control notification handler code here
 
    ChangeRegKeyValue();
 
    HANDLE h_openStore;
    h_openStore = OpenStore(L"DSK1:");
    HANDLE h_NandPart;
    PARTINFO PartInfo;
    PartInfo.cbSize = sizeof(PARTINFO);
    h_NandPart = OpenPartition(h_openStore,L"Part01");
 
    if (DismountPartition(h_NandPart))
    {
        printf("NAND分区卸载成功\n");
    }
    else
    {
        printf("NAND分区卸载失败\n");
        MessageBox(L"显示NAND失败");
        CloseHandle(h_NandPart);
        CloseHandle(h_openStore);
        return;
    }
    if (MountPartition(h_NandPart))
    {
        printf("NAND分区加载成功\n");
    }
    else
    {
        printf("NAND分区加载失败\n");
        MessageBox(L"显示NAND失败");
        CloseHandle(h_NandPart);
        CloseHandle(h_openStore);
        return;
    }
 
    CloseHandle(h_NandPart);
    CloseHandle(h_openStore);
    MessageBox(L"显示NAND成功");
 
}