学习文章:
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成功"); }
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ezhong的博客签名-------------------------------------
以上内容来自ezhong的博客园,作者:ezhong
ezhong的博客园: http://www.cnblogs.com/ezhong
感谢您的阅读。感谢您的分享。