日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

WinCE下监视设备插拔的参考代码

發布時間:2023/12/18 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WinCE下监视设备插拔的参考代码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

????? 在一些項目中,系統需要實時監測U盤或SD卡的插入拔出。當文件系統加載成功后通知特定應用程序,啟動自動播放功能。在U盤或其他外部存儲設備移除時,也需要立即通知相應的程序,停止訪問這些設備,如播放其中的音視頻文件,以免程序出錯。

????? 我們可以使用WinCE設備管理器提供的Device Interface Notification來實現這個功能,參考代碼如下。

DWORD?WINAPI?ThreadFun(LPVOID?lpParameter)
{
????HANDLE?ph[MAXIMUM_WAIT_OBJECTS];
????HANDLE?phMsgQueue[MAXIMUM_WAIT_OBJECTS
-1];
????HANDLE?phDevNotif[MAXIMUM_WAIT_OBJECTS
-1];
????MSGQUEUEOPTIONS?msgopts;
????GUID?guid[]?
=?{BLOCK_DRIVER_GUID,?FSD_MOUNT_GUID};
????DWORD?dwCount;
????BYTE?pDevBuf[
sizeof(DEVDETAIL)?+?MAX_DEVCLASS_NAMELEN?*?sizeof(TCHAR)]?=?{0};
????DEVDETAIL?
*pd?=?(DEVDETAIL*)pDevBuf;

????ghExitThread?
=?CreateEvent(NULL,?FALSE,?FALSE,?NULL);

????ph[
0]?=?ghExitThread;
????dwCount?
=?sizeof(guid)/sizeof(GUID);
????
for?(DWORD?i?=?0;?i?<?dwCount;?i++)
????{
????????memset(
&msgopts,?0,?sizeof(msgopts));
????????msgopts.dwFlags?
=?0;
????????msgopts.dwSize?
=?sizeof(msgopts);
????????msgopts.dwMaxMessages?
=?0;?
????????msgopts.cbMaxMessage?
=?sizeof(pDevBuf);
????????msgopts.bReadAccess?
=?TRUE;

????????phMsgQueue[i]?
=?CreateMsgQueue(NULL,?&msgopts);
????????phDevNotif[i]?
=?RequestDeviceNotifications(guid+i,?phMsgQueue[i],?TRUE);
????????
????????ph[i
+1]?=?phMsgQueue[i];
????}

????
while?(1)
????{
????????DWORD?dwSize;
????????DWORD?dwFlags;
????????DWORD?dwWait;
????????DWORD?dwQueue;
????
????????dwWait?
=?WaitForMultipleObjects(dwCount?+?1,?ph,?FALSE,?INFINITE);
????????
if?((dwWait?<=?WAIT_OBJECT_0)?||?(dwWait?>=?(WAIT_OBJECT_0?+?dwCount?+?1)))?
????????{
????????????
break;
????????}

????????dwQueue?
=?(dwWait?-?WAIT_OBJECT_0)?-?1;
????????
????????
while(ReadMsgQueue(phMsgQueue[dwQueue],?pd,?sizeof(pDevBuf),?&dwSize,?1,?&dwFlags))?
????????{
????????????
if?(GUID_ISEQUAL(pd->guidDevClass,?BLOCK_DRIVER_GUID))
????????????{
????????????????printf(
"\r\nDEV:%S?%s",?pd->szName,?pd->fAttached???"Add!"?:?"Removed!");
????????????????
if?(pd->fAttached)
????????????????{
????????????????????Sleep(
10);
????????????????????printf(
"\r\nOpenStore!");
????????????????????HANDLE?h?
=?OpenStore(pd->szName);
????????????????????STOREINFO?si;
????????????????????memset(
&si,?0?,?sizeof(si));
????????????????????si.cbSize?
=?sizeof(si);
????????????????????printf(
"\r\nGetStoreInfo!");
????????????????????GetStoreInfo(h,?
&si);
????????????????????printf(
"\r\n%S?%x",?si.szStoreName,?si.dwDeviceType);
????????????????????CloseHandle(h);
????????????????}
????????????}
????????????
else?if(GUID_ISEQUAL(pd->guidDevClass,?FSD_MOUNT_GUID))
????????????{
????????????????printf(
"\r\nFSD:%S?%s",?pd->szName,?pd->fAttached???"Add!"?:?"Removed!");
????????????}
????????????Sleep(
1);
????????}????????
????}
????
????
for?(DWORD?i?=?0;?i?<?dwCount;?i++)?
????{
????????StopDeviceNotifications(phDevNotif[i]);
????????CloseMsgQueue(phMsgQueue[i]);
????}????
????CloseHandle(ghExitThread);

????
return?0;
}

轉載于:https://www.cnblogs.com/we-hjb/archive/2011/06/28/2092779.html

總結

以上是生活随笔為你收集整理的WinCE下监视设备插拔的参考代码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。