|
我现在在做一个东东,上面有一个sd卡,sd卡又有引脚连接到wince系统,这样sd卡在wince系统中可见。
现在就相当于sd卡被wince和我的设备共享,使用时通过切换data线来实现。
问题来了,由于wince系统在sd卡插入时读取了里面的fat表并buffer起来,当wince中对sd卡操作时更新buffer内容再回写到sd卡,如果我的设备更新sd卡内容,wince系统并不知道,也不会重新读取。
我目前方案,调用DeactivateDevice和ActivateDevice来重新加载sd memory驱动让sd卡重新被识别。
由于当前sd卡驱动已经加载,直接ActivateDevice会失败,但是DeactivateDevice一定要有ActivateDevice返回的句柄。
我在注册表drivers\active中发现sd卡已加载驱动的句柄 hnd value和clientinfo value,直接调用DeactivateDevice(hnd)会成功,然后ActivateDevice(g_szDrvRegPath,clientInfo);//const WCHAR *g_szDrvRegPath = L"Drivers\\SDCARD\\ClientDrivers\\Class\\SDMemory_Class"; 也会成功,但是执行多次DeactivateDevice /ActivateDevice后,sd卡驱动出现异常,拔下sd卡后,系统内仍有sd卡的盘符,插入sd卡后并没有被真正识别,还是那个遗留的事实不存在的sd卡,这时再调用DeactivateDevice,假的没有了,sd卡再插上去不被识别,这时只能重启系统。
我的做法哪里有问题,大家给个建议。
多谢。
|
|