Je voudrais écrire une application qui créera une «image» d'un lecteur flash. Cela inclut la topographie totale du lecteur, pas seulement les fichiers. Donc, si le lecteur est de 4 Go, vous obtenez un fichier de 4 Go. Est-ce possible, et si oui, quelqu'un pourrait-il me diriger vers des informations sur la façon dont cela peut être accompli?Flash Drive Imaging
1
A
Répondre
1
C'est possible. Je l'ai fait pour une application interne, donc je ne peux pas simplement coller la source pour cela, mais je peux vous donner quelques indices. Vous devrez P/Invoke certaines choses.
[DllImport("kernel32.dll", CharSet = CharSet.Unicode, EntryPoint = "CreateFileW", SetLastError = true)]
public static extern IntPtr CreateFile(string name, int access, int share, byte[] attributes, int create, int flags, IntPtr template);
[DllImport("kernel32.dll", SetLastError = true)]
public static extern int CloseHandle(IntPtr handle);
[DllImport("kernel32.dll", SetLastError = true)]
public static extern int DeviceIoControl(IntPtr handle, DiskIoctl ioctl, byte[] inBuffer, int inBufferSize, byte[] outBuffer, int outBufferSize, ref int bytesReturned, IntPtr overlapped);
[DllImport("kernel32.dll", CharSet = CharSet.Unicode, EntryPoint = "GetLogicalDriveStringsW", SetLastError = true)]
public static extern int GetLogicalDriveStrings(int bufferLength, byte[] buffer);
public enum DiskIoctl
{
ScsiPassThrough = 315396,
Lock = 589848,
Unlock = 589852,
Dismount = 589856,
UpdateProperties = 459072,
GetDiskLayout = 475148,
SetDiskLayout = 507920
}
public enum ScsiOp
{
ReadCapacity = 0x25,
Read = 0x28,
Write = 0x2A
}
0
Avez-vous essayé d'ouvrir le lecteur en tant que fichier et de le copier?
Quel système d'exploitation? Je demande seulement parce que je veux savoir si je traite avec les outils Windows API et CMD ou l'API Linux et les outils shell. – linuxuser27
Oh désolé. Oui je suis sur Windows. Travailler dans Visual Studio.net 2008 – BigPete
Que comptez-vous faire avec l'image après l'avoir copiée? – Robaticus