#include #include "debug.h" #include "stringutils.h" #include "cenk.h" #include "kernelmisc.h" // this does not work for wince3.x bool test_disk(const TCHAR *szDiskName) { HANDLE hDsk= CreateFile(szDiskName, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, 0 ); if (hDsk==NULL || hDsk==INVALID_HANDLE_VALUE) { error("createfile(%ls)", szDiskName); return false; } debug("%ls: hDsk=%08lx\n", szDiskName, hDsk); HDATA *haDsk= cvHandle2HDataPtr(hDsk); if (haDsk==NULL) { debug("%ls: haDsk==NULL\n", szDiskName); return false; } debug("%ls: haDsk=%08lx: %hs\n", szDiskName, haDsk, hexdump((BYTE*)haDsk, 8, 4).c_str()); fsopendev_t *dskdev= (fsopendev_t *)MapPtrProc(haDsk->pvObj, haDsk->pci->pServer); if (dskdev==NULL) { debug("%ls: dskdev==NULL\n", szDiskName); return false; } debug("%ls: dskdev=%08lx: %hs\n", szDiskName, dskdev, hexdump((BYTE*)dskdev, 20, 4).c_str()); BYTE *opendata= (BYTE*)MapPtrProc(dskdev->dwOpenData, haDsk->pci->pServer); if (opendata==NULL) { debug("%ls: opendata==NULL\n", szDiskName); return false; } debug("%ls: opendata=%08lx: %hs\n", szDiskName, opendata, hexdump((BYTE*)opendata, 32, 4).c_str()); debug("%ls: id: %hs\n", szDiskName, hexdump(opendata+64, 16).c_str()); return true; } int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { KernelMode _km; DebugSetLogfile("tstsdid.log"); TCHAR dskname[10]; for (int i=0 ; i<20 ; i++) { _sntprintf(dskname, 10, _T("DSK%d:"), i); test_disk(dskname); } return 0; }