Je vais voir tout ça, il y en a déjà une bonne partie que j'utilise :
Createfile,deviceiocontrol,closehandle...
je regarde avec beaucoup d'interet ....
Merci
A bientot pour le cpte rendu :)
Vincent
"Simon Mourier [SoftFluent]" a écrit dans le
message de news:arggghhh .... 51 lignes (dans un éditeur avec plus de 80 colonnes)...
bon je n'ai pas le safe, mais il faut juste adapter complètement
http://support.microsoft.com/default.aspx?scid=kb;en-us;165721
faut bosser maintenant :-)
Simon
www.softfluent.com
[DllImport("Kernel32.dll", SetLastError = true)]
static extern IntPtr CreateFile(string lpFileName, int dwDesiredAccess,
int dwShareMode, IntPtr lpSecurityAttributes, int dwCreationDisposition,
int
dwFlagsAndAttributes, IntPtr hTemplateFile);
[DllImport("Kernel32.dll", SetLastError = true)]
static extern bool DeviceIoControl(IntPtr hDevice, int dwIoControlCode,
IntPtr lpInBuffer, int nInBufferSize, IntPtr lpOutBuffer, int
nOutBufferSize, out int lpBytesReturned, IntPtr lpOverlapped);
[DllImport("Kernel32.dll", SetLastError = true)]
static extern bool CloseHandle(IntPtr hObject);
const int GENERIC_READ = unchecked((int)0x80000000);
const int FILE_SHARE_READ = 0x00000001;
const int FILE_SHARE_WRITE = 0x00000002;
const int OPEN_EXISTING = 3;
const int IOCTL_STORAGE_EJECT_MEDIA = 0x2D4808;
static bool EjectVolume(string volumeName)
{
IntPtr hFile = CreateFile(@"." + volumeName, GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE, IntPtr.Zero, OPEN_EXISTING, 0,
IntPtr.Zero);
if (hFile == new IntPtr(-1))
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
try
{
int bytesReturned;
if (!DeviceIoControl(hFile, IOCTL_STORAGE_EJECT_MEDIA, IntPtr.Zero, 0,
IntPtr.Zero, 0, out bytesReturned, IntPtr.Zero))
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
}
finally
{
CloseHandle(hFile);
}
return false;
}
static void EjectAllUsbVolumes()
{
foreach(ManagementObject drive in new ManagementObjectSearcher("select
*
from Win32_DiskDrive where InterfaceType='USB'").Get())
{
foreach(ManagementObject partition in new
ManagementObjectSearcher("ASSOCIATORS OF {Win32_DiskDrive.DeviceID='" +
drive["DeviceID"] + "'} WHERE AssocClass >> Win32_DiskDriveToDiskPartition").Get())
{
Console.WriteLine("Partition=" + partition["Name"]);
foreach(ManagementObject disk in new
ManagementObjectSearcher("ASSOCIATORS OF {Win32_DiskPartition.DeviceID='"
+
partition["DeviceID"] + "'} WHERE AssocClass >> Win32_LogicalDiskToPartition").Get())
{
Console.WriteLine("Disk=" + disk["Name"]);
EjectVolume(disk["Name"].ToString());
}
}
Console.WriteLine("Serial=" + new
ManagementObject("Win32_PhysicalMedia.Tag='" + drive["DeviceID"] +
"'")["SerialNumber"]);
}
}
"Vincent" a écrit dans le message de
news:Même que l'ejection de la clé usb en mode "safe" je suis preneur
Vincent
"Merlin" a écrit dans le message de news:ps : s'il y a 20 lignes je suis preneur quand même
je dirais que même jusqu'à 40 c'est encore assez rentable :-)
--
///3rL1n____
Je vais voir tout ça, il y en a déjà une bonne partie que j'utilise :
Createfile,deviceiocontrol,closehandle...
je regarde avec beaucoup d'interet ....
Merci
A bientot pour le cpte rendu :)
Vincent
"Simon Mourier [SoftFluent]" <simon.mourier@mycompany.com> a écrit dans le
message de news: ucZCTAISGHA.2300@TK2MSFTNGP11.phx.gbl...
arggghhh .... 51 lignes (dans un éditeur avec plus de 80 colonnes)...
bon je n'ai pas le safe, mais il faut juste adapter complètement
http://support.microsoft.com/default.aspx?scid=kb;en-us;165721
faut bosser maintenant :-)
Simon
www.softfluent.com
[DllImport("Kernel32.dll", SetLastError = true)]
static extern IntPtr CreateFile(string lpFileName, int dwDesiredAccess,
int dwShareMode, IntPtr lpSecurityAttributes, int dwCreationDisposition,
int
dwFlagsAndAttributes, IntPtr hTemplateFile);
[DllImport("Kernel32.dll", SetLastError = true)]
static extern bool DeviceIoControl(IntPtr hDevice, int dwIoControlCode,
IntPtr lpInBuffer, int nInBufferSize, IntPtr lpOutBuffer, int
nOutBufferSize, out int lpBytesReturned, IntPtr lpOverlapped);
[DllImport("Kernel32.dll", SetLastError = true)]
static extern bool CloseHandle(IntPtr hObject);
const int GENERIC_READ = unchecked((int)0x80000000);
const int FILE_SHARE_READ = 0x00000001;
const int FILE_SHARE_WRITE = 0x00000002;
const int OPEN_EXISTING = 3;
const int IOCTL_STORAGE_EJECT_MEDIA = 0x2D4808;
static bool EjectVolume(string volumeName)
{
IntPtr hFile = CreateFile(@"\." + volumeName, GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE, IntPtr.Zero, OPEN_EXISTING, 0,
IntPtr.Zero);
if (hFile == new IntPtr(-1))
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
try
{
int bytesReturned;
if (!DeviceIoControl(hFile, IOCTL_STORAGE_EJECT_MEDIA, IntPtr.Zero, 0,
IntPtr.Zero, 0, out bytesReturned, IntPtr.Zero))
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
}
finally
{
CloseHandle(hFile);
}
return false;
}
static void EjectAllUsbVolumes()
{
foreach(ManagementObject drive in new ManagementObjectSearcher("select
*
from Win32_DiskDrive where InterfaceType='USB'").Get())
{
foreach(ManagementObject partition in new
ManagementObjectSearcher("ASSOCIATORS OF {Win32_DiskDrive.DeviceID='" +
drive["DeviceID"] + "'} WHERE AssocClass >> Win32_DiskDriveToDiskPartition").Get())
{
Console.WriteLine("Partition=" + partition["Name"]);
foreach(ManagementObject disk in new
ManagementObjectSearcher("ASSOCIATORS OF {Win32_DiskPartition.DeviceID='"
+
partition["DeviceID"] + "'} WHERE AssocClass >> Win32_LogicalDiskToPartition").Get())
{
Console.WriteLine("Disk=" + disk["Name"]);
EjectVolume(disk["Name"].ToString());
}
}
Console.WriteLine("Serial=" + new
ManagementObject("Win32_PhysicalMedia.Tag='" + drive["DeviceID"] +
"'")["SerialNumber"]);
}
}
"Vincent" <vincent31spamaoter@wanadoo.fr> a écrit dans le message de
news:
u3e7AdFSGHA.4384@tk2msftngp13.phx.gbl...
Même que l'ejection de la clé usb en mode "safe" je suis preneur
Vincent
"Merlin" <Merlin@LesFees.Net> a écrit dans le message de news:
mn.79327d639749c88b.18651@LesFees.Net...
ps : s'il y a 20 lignes je suis preneur quand même
je dirais que même jusqu'à 40 c'est encore assez rentable :-)
--
///\3rL1n____
Je vais voir tout ça, il y en a déjà une bonne partie que j'utilise :
Createfile,deviceiocontrol,closehandle...
je regarde avec beaucoup d'interet ....
Merci
A bientot pour le cpte rendu :)
Vincent
"Simon Mourier [SoftFluent]" a écrit dans le
message de news:arggghhh .... 51 lignes (dans un éditeur avec plus de 80 colonnes)...
bon je n'ai pas le safe, mais il faut juste adapter complètement
http://support.microsoft.com/default.aspx?scid=kb;en-us;165721
faut bosser maintenant :-)
Simon
www.softfluent.com
[DllImport("Kernel32.dll", SetLastError = true)]
static extern IntPtr CreateFile(string lpFileName, int dwDesiredAccess,
int dwShareMode, IntPtr lpSecurityAttributes, int dwCreationDisposition,
int
dwFlagsAndAttributes, IntPtr hTemplateFile);
[DllImport("Kernel32.dll", SetLastError = true)]
static extern bool DeviceIoControl(IntPtr hDevice, int dwIoControlCode,
IntPtr lpInBuffer, int nInBufferSize, IntPtr lpOutBuffer, int
nOutBufferSize, out int lpBytesReturned, IntPtr lpOverlapped);
[DllImport("Kernel32.dll", SetLastError = true)]
static extern bool CloseHandle(IntPtr hObject);
const int GENERIC_READ = unchecked((int)0x80000000);
const int FILE_SHARE_READ = 0x00000001;
const int FILE_SHARE_WRITE = 0x00000002;
const int OPEN_EXISTING = 3;
const int IOCTL_STORAGE_EJECT_MEDIA = 0x2D4808;
static bool EjectVolume(string volumeName)
{
IntPtr hFile = CreateFile(@"." + volumeName, GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE, IntPtr.Zero, OPEN_EXISTING, 0,
IntPtr.Zero);
if (hFile == new IntPtr(-1))
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
try
{
int bytesReturned;
if (!DeviceIoControl(hFile, IOCTL_STORAGE_EJECT_MEDIA, IntPtr.Zero, 0,
IntPtr.Zero, 0, out bytesReturned, IntPtr.Zero))
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
}
finally
{
CloseHandle(hFile);
}
return false;
}
static void EjectAllUsbVolumes()
{
foreach(ManagementObject drive in new ManagementObjectSearcher("select
*
from Win32_DiskDrive where InterfaceType='USB'").Get())
{
foreach(ManagementObject partition in new
ManagementObjectSearcher("ASSOCIATORS OF {Win32_DiskDrive.DeviceID='" +
drive["DeviceID"] + "'} WHERE AssocClass >> Win32_DiskDriveToDiskPartition").Get())
{
Console.WriteLine("Partition=" + partition["Name"]);
foreach(ManagementObject disk in new
ManagementObjectSearcher("ASSOCIATORS OF {Win32_DiskPartition.DeviceID='"
+
partition["DeviceID"] + "'} WHERE AssocClass >> Win32_LogicalDiskToPartition").Get())
{
Console.WriteLine("Disk=" + disk["Name"]);
EjectVolume(disk["Name"].ToString());
}
}
Console.WriteLine("Serial=" + new
ManagementObject("Win32_PhysicalMedia.Tag='" + drive["DeviceID"] +
"'")["SerialNumber"]);
}
}
"Vincent" a écrit dans le message de
news:Même que l'ejection de la clé usb en mode "safe" je suis preneur
Vincent
"Merlin" a écrit dans le message de news:ps : s'il y a 20 lignes je suis preneur quand même
je dirais que même jusqu'à 40 c'est encore assez rentable :-)
--
///3rL1n____
Je découvre ManagementObject,
new ManagementObject("Win32_PhysicalMedia.Tag='" + drive["DeviceID"] +
"'")["SerialNumber"] semble ne rien retourner ?
Vincent
"Vincent" a écrit dans le message de news:Je vais voir tout ça, il y en a déjà une bonne partie que j'utilise :
Createfile,deviceiocontrol,closehandle...
je regarde avec beaucoup d'interet ....
Merci
A bientot pour le cpte rendu :)
Vincent
"Simon Mourier [SoftFluent]" a écrit dans
le message de news:arggghhh .... 51 lignes (dans un éditeur avec plus de 80 colonnes)...
bon je n'ai pas le safe, mais il faut juste adapter complètement
http://support.microsoft.com/default.aspx?scid=kb;en-us;165721
faut bosser maintenant :-)
Simon
www.softfluent.com
[DllImport("Kernel32.dll", SetLastError = true)]
static extern IntPtr CreateFile(string lpFileName, int dwDesiredAccess,
int dwShareMode, IntPtr lpSecurityAttributes, int dwCreationDisposition,
int
dwFlagsAndAttributes, IntPtr hTemplateFile);
[DllImport("Kernel32.dll", SetLastError = true)]
static extern bool DeviceIoControl(IntPtr hDevice, int dwIoControlCode,
IntPtr lpInBuffer, int nInBufferSize, IntPtr lpOutBuffer, int
nOutBufferSize, out int lpBytesReturned, IntPtr lpOverlapped);
[DllImport("Kernel32.dll", SetLastError = true)]
static extern bool CloseHandle(IntPtr hObject);
const int GENERIC_READ = unchecked((int)0x80000000);
const int FILE_SHARE_READ = 0x00000001;
const int FILE_SHARE_WRITE = 0x00000002;
const int OPEN_EXISTING = 3;
const int IOCTL_STORAGE_EJECT_MEDIA = 0x2D4808;
static bool EjectVolume(string volumeName)
{
IntPtr hFile = CreateFile(@"." + volumeName, GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE, IntPtr.Zero, OPEN_EXISTING, 0,
IntPtr.Zero);
if (hFile == new IntPtr(-1))
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
try
{
int bytesReturned;
if (!DeviceIoControl(hFile, IOCTL_STORAGE_EJECT_MEDIA, IntPtr.Zero,
0,
IntPtr.Zero, 0, out bytesReturned, IntPtr.Zero))
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
}
finally
{
CloseHandle(hFile);
}
return false;
}
static void EjectAllUsbVolumes()
{
foreach(ManagementObject drive in new ManagementObjectSearcher("select
*
from Win32_DiskDrive where InterfaceType='USB'").Get())
{
foreach(ManagementObject partition in new
ManagementObjectSearcher("ASSOCIATORS OF {Win32_DiskDrive.DeviceID='" +
drive["DeviceID"] + "'} WHERE AssocClass >>> Win32_DiskDriveToDiskPartition").Get())
{
Console.WriteLine("Partition=" + partition["Name"]);
foreach(ManagementObject disk in new
ManagementObjectSearcher("ASSOCIATORS OF
{Win32_DiskPartition.DeviceID='" +
partition["DeviceID"] + "'} WHERE AssocClass >>> Win32_LogicalDiskToPartition").Get())
{
Console.WriteLine("Disk=" + disk["Name"]);
EjectVolume(disk["Name"].ToString());
}
}
Console.WriteLine("Serial=" + new
ManagementObject("Win32_PhysicalMedia.Tag='" + drive["DeviceID"] +
"'")["SerialNumber"]);
}
}
"Vincent" a écrit dans le message de
news:Même que l'ejection de la clé usb en mode "safe" je suis preneur
Vincent
"Merlin" a écrit dans le message de news:ps : s'il y a 20 lignes je suis preneur quand même
je dirais que même jusqu'à 40 c'est encore assez rentable :-)
--
///3rL1n____
Je découvre ManagementObject,
new ManagementObject("Win32_PhysicalMedia.Tag='" + drive["DeviceID"] +
"'")["SerialNumber"] semble ne rien retourner ?
Vincent
"Vincent" <vincent31spamaoter@wanadoo.fr> a écrit dans le message de news:
eem2XkRSGHA.5552@TK2MSFTNGP14.phx.gbl...
Je vais voir tout ça, il y en a déjà une bonne partie que j'utilise :
Createfile,deviceiocontrol,closehandle...
je regarde avec beaucoup d'interet ....
Merci
A bientot pour le cpte rendu :)
Vincent
"Simon Mourier [SoftFluent]" <simon.mourier@mycompany.com> a écrit dans
le message de news: ucZCTAISGHA.2300@TK2MSFTNGP11.phx.gbl...
arggghhh .... 51 lignes (dans un éditeur avec plus de 80 colonnes)...
bon je n'ai pas le safe, mais il faut juste adapter complètement
http://support.microsoft.com/default.aspx?scid=kb;en-us;165721
faut bosser maintenant :-)
Simon
www.softfluent.com
[DllImport("Kernel32.dll", SetLastError = true)]
static extern IntPtr CreateFile(string lpFileName, int dwDesiredAccess,
int dwShareMode, IntPtr lpSecurityAttributes, int dwCreationDisposition,
int
dwFlagsAndAttributes, IntPtr hTemplateFile);
[DllImport("Kernel32.dll", SetLastError = true)]
static extern bool DeviceIoControl(IntPtr hDevice, int dwIoControlCode,
IntPtr lpInBuffer, int nInBufferSize, IntPtr lpOutBuffer, int
nOutBufferSize, out int lpBytesReturned, IntPtr lpOverlapped);
[DllImport("Kernel32.dll", SetLastError = true)]
static extern bool CloseHandle(IntPtr hObject);
const int GENERIC_READ = unchecked((int)0x80000000);
const int FILE_SHARE_READ = 0x00000001;
const int FILE_SHARE_WRITE = 0x00000002;
const int OPEN_EXISTING = 3;
const int IOCTL_STORAGE_EJECT_MEDIA = 0x2D4808;
static bool EjectVolume(string volumeName)
{
IntPtr hFile = CreateFile(@"\." + volumeName, GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE, IntPtr.Zero, OPEN_EXISTING, 0,
IntPtr.Zero);
if (hFile == new IntPtr(-1))
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
try
{
int bytesReturned;
if (!DeviceIoControl(hFile, IOCTL_STORAGE_EJECT_MEDIA, IntPtr.Zero,
0,
IntPtr.Zero, 0, out bytesReturned, IntPtr.Zero))
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
}
finally
{
CloseHandle(hFile);
}
return false;
}
static void EjectAllUsbVolumes()
{
foreach(ManagementObject drive in new ManagementObjectSearcher("select
*
from Win32_DiskDrive where InterfaceType='USB'").Get())
{
foreach(ManagementObject partition in new
ManagementObjectSearcher("ASSOCIATORS OF {Win32_DiskDrive.DeviceID='" +
drive["DeviceID"] + "'} WHERE AssocClass >>> Win32_DiskDriveToDiskPartition").Get())
{
Console.WriteLine("Partition=" + partition["Name"]);
foreach(ManagementObject disk in new
ManagementObjectSearcher("ASSOCIATORS OF
{Win32_DiskPartition.DeviceID='" +
partition["DeviceID"] + "'} WHERE AssocClass >>> Win32_LogicalDiskToPartition").Get())
{
Console.WriteLine("Disk=" + disk["Name"]);
EjectVolume(disk["Name"].ToString());
}
}
Console.WriteLine("Serial=" + new
ManagementObject("Win32_PhysicalMedia.Tag='" + drive["DeviceID"] +
"'")["SerialNumber"]);
}
}
"Vincent" <vincent31spamaoter@wanadoo.fr> a écrit dans le message de
news:
u3e7AdFSGHA.4384@tk2msftngp13.phx.gbl...
Même que l'ejection de la clé usb en mode "safe" je suis preneur
Vincent
"Merlin" <Merlin@LesFees.Net> a écrit dans le message de news:
mn.79327d639749c88b.18651@LesFees.Net...
ps : s'il y a 20 lignes je suis preneur quand même
je dirais que même jusqu'à 40 c'est encore assez rentable :-)
--
///\3rL1n____
Je découvre ManagementObject,
new ManagementObject("Win32_PhysicalMedia.Tag='" + drive["DeviceID"] +
"'")["SerialNumber"] semble ne rien retourner ?
Vincent
"Vincent" a écrit dans le message de news:Je vais voir tout ça, il y en a déjà une bonne partie que j'utilise :
Createfile,deviceiocontrol,closehandle...
je regarde avec beaucoup d'interet ....
Merci
A bientot pour le cpte rendu :)
Vincent
"Simon Mourier [SoftFluent]" a écrit dans
le message de news:arggghhh .... 51 lignes (dans un éditeur avec plus de 80 colonnes)...
bon je n'ai pas le safe, mais il faut juste adapter complètement
http://support.microsoft.com/default.aspx?scid=kb;en-us;165721
faut bosser maintenant :-)
Simon
www.softfluent.com
[DllImport("Kernel32.dll", SetLastError = true)]
static extern IntPtr CreateFile(string lpFileName, int dwDesiredAccess,
int dwShareMode, IntPtr lpSecurityAttributes, int dwCreationDisposition,
int
dwFlagsAndAttributes, IntPtr hTemplateFile);
[DllImport("Kernel32.dll", SetLastError = true)]
static extern bool DeviceIoControl(IntPtr hDevice, int dwIoControlCode,
IntPtr lpInBuffer, int nInBufferSize, IntPtr lpOutBuffer, int
nOutBufferSize, out int lpBytesReturned, IntPtr lpOverlapped);
[DllImport("Kernel32.dll", SetLastError = true)]
static extern bool CloseHandle(IntPtr hObject);
const int GENERIC_READ = unchecked((int)0x80000000);
const int FILE_SHARE_READ = 0x00000001;
const int FILE_SHARE_WRITE = 0x00000002;
const int OPEN_EXISTING = 3;
const int IOCTL_STORAGE_EJECT_MEDIA = 0x2D4808;
static bool EjectVolume(string volumeName)
{
IntPtr hFile = CreateFile(@"." + volumeName, GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE, IntPtr.Zero, OPEN_EXISTING, 0,
IntPtr.Zero);
if (hFile == new IntPtr(-1))
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
try
{
int bytesReturned;
if (!DeviceIoControl(hFile, IOCTL_STORAGE_EJECT_MEDIA, IntPtr.Zero,
0,
IntPtr.Zero, 0, out bytesReturned, IntPtr.Zero))
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
}
finally
{
CloseHandle(hFile);
}
return false;
}
static void EjectAllUsbVolumes()
{
foreach(ManagementObject drive in new ManagementObjectSearcher("select
*
from Win32_DiskDrive where InterfaceType='USB'").Get())
{
foreach(ManagementObject partition in new
ManagementObjectSearcher("ASSOCIATORS OF {Win32_DiskDrive.DeviceID='" +
drive["DeviceID"] + "'} WHERE AssocClass >>> Win32_DiskDriveToDiskPartition").Get())
{
Console.WriteLine("Partition=" + partition["Name"]);
foreach(ManagementObject disk in new
ManagementObjectSearcher("ASSOCIATORS OF
{Win32_DiskPartition.DeviceID='" +
partition["DeviceID"] + "'} WHERE AssocClass >>> Win32_LogicalDiskToPartition").Get())
{
Console.WriteLine("Disk=" + disk["Name"]);
EjectVolume(disk["Name"].ToString());
}
}
Console.WriteLine("Serial=" + new
ManagementObject("Win32_PhysicalMedia.Tag='" + drive["DeviceID"] +
"'")["SerialNumber"]);
}
}
"Vincent" a écrit dans le message de
news:Même que l'ejection de la clé usb en mode "safe" je suis preneur
Vincent
"Merlin" a écrit dans le message de news:ps : s'il y a 20 lignes je suis preneur quand même
je dirais que même jusqu'à 40 c'est encore assez rentable :-)
--
///3rL1n____
Malheureusement, la norme USB n'impose pas de numéro de série pour un
périphérique, quel qu'il soit. Etes vous sûr que le disque en question a
un numéro de série?
voir ici:
http://blogs.msdn.com/oldnewthing/archive/2004/11/10/255047.aspx
Simon.
www.softfluent.com
"Vincent" a écrit dans le message de news:Je découvre ManagementObject,
new ManagementObject("Win32_PhysicalMedia.Tag='" + drive["DeviceID"] +
"'")["SerialNumber"] semble ne rien retourner ?
Vincent
"Vincent" a écrit dans le message de
news:Je vais voir tout ça, il y en a déjà une bonne partie que j'utilise :
Createfile,deviceiocontrol,closehandle...
je regarde avec beaucoup d'interet ....
Merci
A bientot pour le cpte rendu :)
Vincent
"Simon Mourier [SoftFluent]" a écrit dans
le message de news:arggghhh .... 51 lignes (dans un éditeur avec plus de 80 colonnes)...
bon je n'ai pas le safe, mais il faut juste adapter complètement
http://support.microsoft.com/default.aspx?scid=kb;en-us;165721
faut bosser maintenant :-)
Simon
www.softfluent.com
[DllImport("Kernel32.dll", SetLastError = true)]
static extern IntPtr CreateFile(string lpFileName, int
dwDesiredAccess,
int dwShareMode, IntPtr lpSecurityAttributes, int
dwCreationDisposition, int
dwFlagsAndAttributes, IntPtr hTemplateFile);
[DllImport("Kernel32.dll", SetLastError = true)]
static extern bool DeviceIoControl(IntPtr hDevice, int
dwIoControlCode,
IntPtr lpInBuffer, int nInBufferSize, IntPtr lpOutBuffer, int
nOutBufferSize, out int lpBytesReturned, IntPtr lpOverlapped);
[DllImport("Kernel32.dll", SetLastError = true)]
static extern bool CloseHandle(IntPtr hObject);
const int GENERIC_READ = unchecked((int)0x80000000);
const int FILE_SHARE_READ = 0x00000001;
const int FILE_SHARE_WRITE = 0x00000002;
const int OPEN_EXISTING = 3;
const int IOCTL_STORAGE_EJECT_MEDIA = 0x2D4808;
static bool EjectVolume(string volumeName)
{
IntPtr hFile = CreateFile(@"." + volumeName, GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE, IntPtr.Zero, OPEN_EXISTING, 0,
IntPtr.Zero);
if (hFile == new IntPtr(-1))
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
try
{
int bytesReturned;
if (!DeviceIoControl(hFile, IOCTL_STORAGE_EJECT_MEDIA, IntPtr.Zero,
0,
IntPtr.Zero, 0, out bytesReturned, IntPtr.Zero))
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
}
finally
{
CloseHandle(hFile);
}
return false;
}
static void EjectAllUsbVolumes()
{
foreach(ManagementObject drive in new
ManagementObjectSearcher("select *
from Win32_DiskDrive where InterfaceType='USB'").Get())
{
foreach(ManagementObject partition in new
ManagementObjectSearcher("ASSOCIATORS OF {Win32_DiskDrive.DeviceID='" +
drive["DeviceID"] + "'} WHERE AssocClass >>>> Win32_DiskDriveToDiskPartition").Get())
{
Console.WriteLine("Partition=" + partition["Name"]);
foreach(ManagementObject disk in new
ManagementObjectSearcher("ASSOCIATORS OF
{Win32_DiskPartition.DeviceID='" +
partition["DeviceID"] + "'} WHERE AssocClass >>>> Win32_LogicalDiskToPartition").Get())
{
Console.WriteLine("Disk=" + disk["Name"]);
EjectVolume(disk["Name"].ToString());
}
}
Console.WriteLine("Serial=" + new
ManagementObject("Win32_PhysicalMedia.Tag='" + drive["DeviceID"] +
"'")["SerialNumber"]);
}
}
"Vincent" a écrit dans le message de
news:Même que l'ejection de la clé usb en mode "safe" je suis preneur
Vincent
"Merlin" a écrit dans le message de news:ps : s'il y a 20 lignes je suis preneur quand même
je dirais que même jusqu'à 40 c'est encore assez rentable :-)
--
///3rL1n____
Malheureusement, la norme USB n'impose pas de numéro de série pour un
périphérique, quel qu'il soit. Etes vous sûr que le disque en question a
un numéro de série?
voir ici:
http://blogs.msdn.com/oldnewthing/archive/2004/11/10/255047.aspx
Simon.
www.softfluent.com
"Vincent" <vincent31spamaoter@wanadoo.fr> a écrit dans le message de news:
elzYl0XSGHA.5736@TK2MSFTNGP10.phx.gbl...
Je découvre ManagementObject,
new ManagementObject("Win32_PhysicalMedia.Tag='" + drive["DeviceID"] +
"'")["SerialNumber"] semble ne rien retourner ?
Vincent
"Vincent" <vincent31spamaoter@wanadoo.fr> a écrit dans le message de
news: eem2XkRSGHA.5552@TK2MSFTNGP14.phx.gbl...
Je vais voir tout ça, il y en a déjà une bonne partie que j'utilise :
Createfile,deviceiocontrol,closehandle...
je regarde avec beaucoup d'interet ....
Merci
A bientot pour le cpte rendu :)
Vincent
"Simon Mourier [SoftFluent]" <simon.mourier@mycompany.com> a écrit dans
le message de news: ucZCTAISGHA.2300@TK2MSFTNGP11.phx.gbl...
arggghhh .... 51 lignes (dans un éditeur avec plus de 80 colonnes)...
bon je n'ai pas le safe, mais il faut juste adapter complètement
http://support.microsoft.com/default.aspx?scid=kb;en-us;165721
faut bosser maintenant :-)
Simon
www.softfluent.com
[DllImport("Kernel32.dll", SetLastError = true)]
static extern IntPtr CreateFile(string lpFileName, int
dwDesiredAccess,
int dwShareMode, IntPtr lpSecurityAttributes, int
dwCreationDisposition, int
dwFlagsAndAttributes, IntPtr hTemplateFile);
[DllImport("Kernel32.dll", SetLastError = true)]
static extern bool DeviceIoControl(IntPtr hDevice, int
dwIoControlCode,
IntPtr lpInBuffer, int nInBufferSize, IntPtr lpOutBuffer, int
nOutBufferSize, out int lpBytesReturned, IntPtr lpOverlapped);
[DllImport("Kernel32.dll", SetLastError = true)]
static extern bool CloseHandle(IntPtr hObject);
const int GENERIC_READ = unchecked((int)0x80000000);
const int FILE_SHARE_READ = 0x00000001;
const int FILE_SHARE_WRITE = 0x00000002;
const int OPEN_EXISTING = 3;
const int IOCTL_STORAGE_EJECT_MEDIA = 0x2D4808;
static bool EjectVolume(string volumeName)
{
IntPtr hFile = CreateFile(@"\." + volumeName, GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE, IntPtr.Zero, OPEN_EXISTING, 0,
IntPtr.Zero);
if (hFile == new IntPtr(-1))
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
try
{
int bytesReturned;
if (!DeviceIoControl(hFile, IOCTL_STORAGE_EJECT_MEDIA, IntPtr.Zero,
0,
IntPtr.Zero, 0, out bytesReturned, IntPtr.Zero))
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
}
finally
{
CloseHandle(hFile);
}
return false;
}
static void EjectAllUsbVolumes()
{
foreach(ManagementObject drive in new
ManagementObjectSearcher("select *
from Win32_DiskDrive where InterfaceType='USB'").Get())
{
foreach(ManagementObject partition in new
ManagementObjectSearcher("ASSOCIATORS OF {Win32_DiskDrive.DeviceID='" +
drive["DeviceID"] + "'} WHERE AssocClass >>>> Win32_DiskDriveToDiskPartition").Get())
{
Console.WriteLine("Partition=" + partition["Name"]);
foreach(ManagementObject disk in new
ManagementObjectSearcher("ASSOCIATORS OF
{Win32_DiskPartition.DeviceID='" +
partition["DeviceID"] + "'} WHERE AssocClass >>>> Win32_LogicalDiskToPartition").Get())
{
Console.WriteLine("Disk=" + disk["Name"]);
EjectVolume(disk["Name"].ToString());
}
}
Console.WriteLine("Serial=" + new
ManagementObject("Win32_PhysicalMedia.Tag='" + drive["DeviceID"] +
"'")["SerialNumber"]);
}
}
"Vincent" <vincent31spamaoter@wanadoo.fr> a écrit dans le message de
news:
u3e7AdFSGHA.4384@tk2msftngp13.phx.gbl...
Même que l'ejection de la clé usb en mode "safe" je suis preneur
Vincent
"Merlin" <Merlin@LesFees.Net> a écrit dans le message de news:
mn.79327d639749c88b.18651@LesFees.Net...
ps : s'il y a 20 lignes je suis preneur quand même
je dirais que même jusqu'à 40 c'est encore assez rentable :-)
--
///\3rL1n____
Malheureusement, la norme USB n'impose pas de numéro de série pour un
périphérique, quel qu'il soit. Etes vous sûr que le disque en question a
un numéro de série?
voir ici:
http://blogs.msdn.com/oldnewthing/archive/2004/11/10/255047.aspx
Simon.
www.softfluent.com
"Vincent" a écrit dans le message de news:Je découvre ManagementObject,
new ManagementObject("Win32_PhysicalMedia.Tag='" + drive["DeviceID"] +
"'")["SerialNumber"] semble ne rien retourner ?
Vincent
"Vincent" a écrit dans le message de
news:Je vais voir tout ça, il y en a déjà une bonne partie que j'utilise :
Createfile,deviceiocontrol,closehandle...
je regarde avec beaucoup d'interet ....
Merci
A bientot pour le cpte rendu :)
Vincent
"Simon Mourier [SoftFluent]" a écrit dans
le message de news:arggghhh .... 51 lignes (dans un éditeur avec plus de 80 colonnes)...
bon je n'ai pas le safe, mais il faut juste adapter complètement
http://support.microsoft.com/default.aspx?scid=kb;en-us;165721
faut bosser maintenant :-)
Simon
www.softfluent.com
[DllImport("Kernel32.dll", SetLastError = true)]
static extern IntPtr CreateFile(string lpFileName, int
dwDesiredAccess,
int dwShareMode, IntPtr lpSecurityAttributes, int
dwCreationDisposition, int
dwFlagsAndAttributes, IntPtr hTemplateFile);
[DllImport("Kernel32.dll", SetLastError = true)]
static extern bool DeviceIoControl(IntPtr hDevice, int
dwIoControlCode,
IntPtr lpInBuffer, int nInBufferSize, IntPtr lpOutBuffer, int
nOutBufferSize, out int lpBytesReturned, IntPtr lpOverlapped);
[DllImport("Kernel32.dll", SetLastError = true)]
static extern bool CloseHandle(IntPtr hObject);
const int GENERIC_READ = unchecked((int)0x80000000);
const int FILE_SHARE_READ = 0x00000001;
const int FILE_SHARE_WRITE = 0x00000002;
const int OPEN_EXISTING = 3;
const int IOCTL_STORAGE_EJECT_MEDIA = 0x2D4808;
static bool EjectVolume(string volumeName)
{
IntPtr hFile = CreateFile(@"." + volumeName, GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE, IntPtr.Zero, OPEN_EXISTING, 0,
IntPtr.Zero);
if (hFile == new IntPtr(-1))
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
try
{
int bytesReturned;
if (!DeviceIoControl(hFile, IOCTL_STORAGE_EJECT_MEDIA, IntPtr.Zero,
0,
IntPtr.Zero, 0, out bytesReturned, IntPtr.Zero))
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
}
finally
{
CloseHandle(hFile);
}
return false;
}
static void EjectAllUsbVolumes()
{
foreach(ManagementObject drive in new
ManagementObjectSearcher("select *
from Win32_DiskDrive where InterfaceType='USB'").Get())
{
foreach(ManagementObject partition in new
ManagementObjectSearcher("ASSOCIATORS OF {Win32_DiskDrive.DeviceID='" +
drive["DeviceID"] + "'} WHERE AssocClass >>>> Win32_DiskDriveToDiskPartition").Get())
{
Console.WriteLine("Partition=" + partition["Name"]);
foreach(ManagementObject disk in new
ManagementObjectSearcher("ASSOCIATORS OF
{Win32_DiskPartition.DeviceID='" +
partition["DeviceID"] + "'} WHERE AssocClass >>>> Win32_LogicalDiskToPartition").Get())
{
Console.WriteLine("Disk=" + disk["Name"]);
EjectVolume(disk["Name"].ToString());
}
}
Console.WriteLine("Serial=" + new
ManagementObject("Win32_PhysicalMedia.Tag='" + drive["DeviceID"] +
"'")["SerialNumber"]);
}
}
"Vincent" a écrit dans le message de
news:Même que l'ejection de la clé usb en mode "safe" je suis preneur
Vincent
"Merlin" a écrit dans le message de news:ps : s'il y a 20 lignes je suis preneur quand même
je dirais que même jusqu'à 40 c'est encore assez rentable :-)
--
///3rL1n____
Merci pour ton aide,
j'ai suivi les directives du lien
http://support.microsoft.com/default.aspx?scid=kb;en-us;165721
j'obtien des résultats. mais pour
DeviceIoControl(hDrive,FSCTL_DISMOUNT_VOLUME,IntPtr.Zero,0,IntPtr.Zero,0,ref
octet_retour,IntPtr.Zero)
Renvoi l'erreur 112 sous 2000
et
sous xp : err 24 , Le programme a émis une commande de longueur
incorrecte
Je sais pas trop quoi faire.
La clé est prète à être éjectée pas l'utilisateur, mais à ce moment une
fenêtre (sous 2000)
indique qu'on a retiré la clé brusquement et il faut cliquer ok pour
continuer !
Le client dit : non j'en veut pas
je suis ds le caca :)
Vincent
"Simon Mourier [SoftFluent]" a écrit dans le
message de news:Malheureusement, la norme USB n'impose pas de numéro de série pour un
périphérique, quel qu'il soit. Etes vous sûr que le disque en question a
un numéro de série?
voir ici:
http://blogs.msdn.com/oldnewthing/archive/2004/11/10/255047.aspx
Simon.
www.softfluent.com
"Vincent" a écrit dans le message de
news:Je découvre ManagementObject,
new ManagementObject("Win32_PhysicalMedia.Tag='" + drive["DeviceID"] +
"'")["SerialNumber"] semble ne rien retourner ?
Vincent
"Vincent" a écrit dans le message de
news:Je vais voir tout ça, il y en a déjà une bonne partie que j'utilise :
Createfile,deviceiocontrol,closehandle...
je regarde avec beaucoup d'interet ....
Merci
A bientot pour le cpte rendu :)
Vincent
"Simon Mourier [SoftFluent]" a écrit dans
le message de news:arggghhh .... 51 lignes (dans un éditeur avec plus de 80 colonnes)...
bon je n'ai pas le safe, mais il faut juste adapter complètement
http://support.microsoft.com/default.aspx?scid=kb;en-us;165721
faut bosser maintenant :-)
Simon
www.softfluent.com
[DllImport("Kernel32.dll", SetLastError = true)]
static extern IntPtr CreateFile(string lpFileName, int
dwDesiredAccess,
int dwShareMode, IntPtr lpSecurityAttributes, int
dwCreationDisposition, int
dwFlagsAndAttributes, IntPtr hTemplateFile);
[DllImport("Kernel32.dll", SetLastError = true)]
static extern bool DeviceIoControl(IntPtr hDevice, int
dwIoControlCode,
IntPtr lpInBuffer, int nInBufferSize, IntPtr lpOutBuffer, int
nOutBufferSize, out int lpBytesReturned, IntPtr lpOverlapped);
[DllImport("Kernel32.dll", SetLastError = true)]
static extern bool CloseHandle(IntPtr hObject);
const int GENERIC_READ = unchecked((int)0x80000000);
const int FILE_SHARE_READ = 0x00000001;
const int FILE_SHARE_WRITE = 0x00000002;
const int OPEN_EXISTING = 3;
const int IOCTL_STORAGE_EJECT_MEDIA = 0x2D4808;
static bool EjectVolume(string volumeName)
{
IntPtr hFile = CreateFile(@"." + volumeName, GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE, IntPtr.Zero, OPEN_EXISTING, 0,
IntPtr.Zero);
if (hFile == new IntPtr(-1))
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
try
{
int bytesReturned;
if (!DeviceIoControl(hFile, IOCTL_STORAGE_EJECT_MEDIA, IntPtr.Zero,
0,
IntPtr.Zero, 0, out bytesReturned, IntPtr.Zero))
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
}
finally
{
CloseHandle(hFile);
}
return false;
}
static void EjectAllUsbVolumes()
{
foreach(ManagementObject drive in new
ManagementObjectSearcher("select *
from Win32_DiskDrive where InterfaceType='USB'").Get())
{
foreach(ManagementObject partition in new
ManagementObjectSearcher("ASSOCIATORS OF {Win32_DiskDrive.DeviceID='"
+
drive["DeviceID"] + "'} WHERE AssocClass >>>>> Win32_DiskDriveToDiskPartition").Get())
{
Console.WriteLine("Partition=" + partition["Name"]);
foreach(ManagementObject disk in new
ManagementObjectSearcher("ASSOCIATORS OF
{Win32_DiskPartition.DeviceID='" +
partition["DeviceID"] + "'} WHERE AssocClass >>>>> Win32_LogicalDiskToPartition").Get())
{
Console.WriteLine("Disk=" + disk["Name"]);
EjectVolume(disk["Name"].ToString());
}
}
Console.WriteLine("Serial=" + new
ManagementObject("Win32_PhysicalMedia.Tag='" + drive["DeviceID"] +
"'")["SerialNumber"]);
}
}
"Vincent" a écrit dans le message de
news:Même que l'ejection de la clé usb en mode "safe" je suis preneur
Vincent
"Merlin" a écrit dans le message de news:ps : s'il y a 20 lignes je suis preneur quand même
je dirais que même jusqu'à 40 c'est encore assez rentable :-)
--
///3rL1n____
Merci pour ton aide,
j'ai suivi les directives du lien
http://support.microsoft.com/default.aspx?scid=kb;en-us;165721
j'obtien des résultats. mais pour
DeviceIoControl(hDrive,FSCTL_DISMOUNT_VOLUME,IntPtr.Zero,0,IntPtr.Zero,0,ref
octet_retour,IntPtr.Zero)
Renvoi l'erreur 112 sous 2000
et
sous xp : err 24 , Le programme a émis une commande de longueur
incorrecte
Je sais pas trop quoi faire.
La clé est prète à être éjectée pas l'utilisateur, mais à ce moment une
fenêtre (sous 2000)
indique qu'on a retiré la clé brusquement et il faut cliquer ok pour
continuer !
Le client dit : non j'en veut pas
je suis ds le caca :)
Vincent
"Simon Mourier [SoftFluent]" <simon.mourier@mycompany.com> a écrit dans le
message de news: uYcWAGaSGHA.5728@tk2msftngp13.phx.gbl...
Malheureusement, la norme USB n'impose pas de numéro de série pour un
périphérique, quel qu'il soit. Etes vous sûr que le disque en question a
un numéro de série?
voir ici:
http://blogs.msdn.com/oldnewthing/archive/2004/11/10/255047.aspx
Simon.
www.softfluent.com
"Vincent" <vincent31spamaoter@wanadoo.fr> a écrit dans le message de
news: elzYl0XSGHA.5736@TK2MSFTNGP10.phx.gbl...
Je découvre ManagementObject,
new ManagementObject("Win32_PhysicalMedia.Tag='" + drive["DeviceID"] +
"'")["SerialNumber"] semble ne rien retourner ?
Vincent
"Vincent" <vincent31spamaoter@wanadoo.fr> a écrit dans le message de
news: eem2XkRSGHA.5552@TK2MSFTNGP14.phx.gbl...
Je vais voir tout ça, il y en a déjà une bonne partie que j'utilise :
Createfile,deviceiocontrol,closehandle...
je regarde avec beaucoup d'interet ....
Merci
A bientot pour le cpte rendu :)
Vincent
"Simon Mourier [SoftFluent]" <simon.mourier@mycompany.com> a écrit dans
le message de news: ucZCTAISGHA.2300@TK2MSFTNGP11.phx.gbl...
arggghhh .... 51 lignes (dans un éditeur avec plus de 80 colonnes)...
bon je n'ai pas le safe, mais il faut juste adapter complètement
http://support.microsoft.com/default.aspx?scid=kb;en-us;165721
faut bosser maintenant :-)
Simon
www.softfluent.com
[DllImport("Kernel32.dll", SetLastError = true)]
static extern IntPtr CreateFile(string lpFileName, int
dwDesiredAccess,
int dwShareMode, IntPtr lpSecurityAttributes, int
dwCreationDisposition, int
dwFlagsAndAttributes, IntPtr hTemplateFile);
[DllImport("Kernel32.dll", SetLastError = true)]
static extern bool DeviceIoControl(IntPtr hDevice, int
dwIoControlCode,
IntPtr lpInBuffer, int nInBufferSize, IntPtr lpOutBuffer, int
nOutBufferSize, out int lpBytesReturned, IntPtr lpOverlapped);
[DllImport("Kernel32.dll", SetLastError = true)]
static extern bool CloseHandle(IntPtr hObject);
const int GENERIC_READ = unchecked((int)0x80000000);
const int FILE_SHARE_READ = 0x00000001;
const int FILE_SHARE_WRITE = 0x00000002;
const int OPEN_EXISTING = 3;
const int IOCTL_STORAGE_EJECT_MEDIA = 0x2D4808;
static bool EjectVolume(string volumeName)
{
IntPtr hFile = CreateFile(@"\." + volumeName, GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE, IntPtr.Zero, OPEN_EXISTING, 0,
IntPtr.Zero);
if (hFile == new IntPtr(-1))
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
try
{
int bytesReturned;
if (!DeviceIoControl(hFile, IOCTL_STORAGE_EJECT_MEDIA, IntPtr.Zero,
0,
IntPtr.Zero, 0, out bytesReturned, IntPtr.Zero))
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
}
finally
{
CloseHandle(hFile);
}
return false;
}
static void EjectAllUsbVolumes()
{
foreach(ManagementObject drive in new
ManagementObjectSearcher("select *
from Win32_DiskDrive where InterfaceType='USB'").Get())
{
foreach(ManagementObject partition in new
ManagementObjectSearcher("ASSOCIATORS OF {Win32_DiskDrive.DeviceID='"
+
drive["DeviceID"] + "'} WHERE AssocClass >>>>> Win32_DiskDriveToDiskPartition").Get())
{
Console.WriteLine("Partition=" + partition["Name"]);
foreach(ManagementObject disk in new
ManagementObjectSearcher("ASSOCIATORS OF
{Win32_DiskPartition.DeviceID='" +
partition["DeviceID"] + "'} WHERE AssocClass >>>>> Win32_LogicalDiskToPartition").Get())
{
Console.WriteLine("Disk=" + disk["Name"]);
EjectVolume(disk["Name"].ToString());
}
}
Console.WriteLine("Serial=" + new
ManagementObject("Win32_PhysicalMedia.Tag='" + drive["DeviceID"] +
"'")["SerialNumber"]);
}
}
"Vincent" <vincent31spamaoter@wanadoo.fr> a écrit dans le message de
news:
u3e7AdFSGHA.4384@tk2msftngp13.phx.gbl...
Même que l'ejection de la clé usb en mode "safe" je suis preneur
Vincent
"Merlin" <Merlin@LesFees.Net> a écrit dans le message de news:
mn.79327d639749c88b.18651@LesFees.Net...
ps : s'il y a 20 lignes je suis preneur quand même
je dirais que même jusqu'à 40 c'est encore assez rentable :-)
--
///\3rL1n____
Merci pour ton aide,
j'ai suivi les directives du lien
http://support.microsoft.com/default.aspx?scid=kb;en-us;165721
j'obtien des résultats. mais pour
DeviceIoControl(hDrive,FSCTL_DISMOUNT_VOLUME,IntPtr.Zero,0,IntPtr.Zero,0,ref
octet_retour,IntPtr.Zero)
Renvoi l'erreur 112 sous 2000
et
sous xp : err 24 , Le programme a émis une commande de longueur
incorrecte
Je sais pas trop quoi faire.
La clé est prète à être éjectée pas l'utilisateur, mais à ce moment une
fenêtre (sous 2000)
indique qu'on a retiré la clé brusquement et il faut cliquer ok pour
continuer !
Le client dit : non j'en veut pas
je suis ds le caca :)
Vincent
"Simon Mourier [SoftFluent]" a écrit dans le
message de news:Malheureusement, la norme USB n'impose pas de numéro de série pour un
périphérique, quel qu'il soit. Etes vous sûr que le disque en question a
un numéro de série?
voir ici:
http://blogs.msdn.com/oldnewthing/archive/2004/11/10/255047.aspx
Simon.
www.softfluent.com
"Vincent" a écrit dans le message de
news:Je découvre ManagementObject,
new ManagementObject("Win32_PhysicalMedia.Tag='" + drive["DeviceID"] +
"'")["SerialNumber"] semble ne rien retourner ?
Vincent
"Vincent" a écrit dans le message de
news:Je vais voir tout ça, il y en a déjà une bonne partie que j'utilise :
Createfile,deviceiocontrol,closehandle...
je regarde avec beaucoup d'interet ....
Merci
A bientot pour le cpte rendu :)
Vincent
"Simon Mourier [SoftFluent]" a écrit dans
le message de news:arggghhh .... 51 lignes (dans un éditeur avec plus de 80 colonnes)...
bon je n'ai pas le safe, mais il faut juste adapter complètement
http://support.microsoft.com/default.aspx?scid=kb;en-us;165721
faut bosser maintenant :-)
Simon
www.softfluent.com
[DllImport("Kernel32.dll", SetLastError = true)]
static extern IntPtr CreateFile(string lpFileName, int
dwDesiredAccess,
int dwShareMode, IntPtr lpSecurityAttributes, int
dwCreationDisposition, int
dwFlagsAndAttributes, IntPtr hTemplateFile);
[DllImport("Kernel32.dll", SetLastError = true)]
static extern bool DeviceIoControl(IntPtr hDevice, int
dwIoControlCode,
IntPtr lpInBuffer, int nInBufferSize, IntPtr lpOutBuffer, int
nOutBufferSize, out int lpBytesReturned, IntPtr lpOverlapped);
[DllImport("Kernel32.dll", SetLastError = true)]
static extern bool CloseHandle(IntPtr hObject);
const int GENERIC_READ = unchecked((int)0x80000000);
const int FILE_SHARE_READ = 0x00000001;
const int FILE_SHARE_WRITE = 0x00000002;
const int OPEN_EXISTING = 3;
const int IOCTL_STORAGE_EJECT_MEDIA = 0x2D4808;
static bool EjectVolume(string volumeName)
{
IntPtr hFile = CreateFile(@"." + volumeName, GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE, IntPtr.Zero, OPEN_EXISTING, 0,
IntPtr.Zero);
if (hFile == new IntPtr(-1))
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
try
{
int bytesReturned;
if (!DeviceIoControl(hFile, IOCTL_STORAGE_EJECT_MEDIA, IntPtr.Zero,
0,
IntPtr.Zero, 0, out bytesReturned, IntPtr.Zero))
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
}
finally
{
CloseHandle(hFile);
}
return false;
}
static void EjectAllUsbVolumes()
{
foreach(ManagementObject drive in new
ManagementObjectSearcher("select *
from Win32_DiskDrive where InterfaceType='USB'").Get())
{
foreach(ManagementObject partition in new
ManagementObjectSearcher("ASSOCIATORS OF {Win32_DiskDrive.DeviceID='"
+
drive["DeviceID"] + "'} WHERE AssocClass >>>>> Win32_DiskDriveToDiskPartition").Get())
{
Console.WriteLine("Partition=" + partition["Name"]);
foreach(ManagementObject disk in new
ManagementObjectSearcher("ASSOCIATORS OF
{Win32_DiskPartition.DeviceID='" +
partition["DeviceID"] + "'} WHERE AssocClass >>>>> Win32_LogicalDiskToPartition").Get())
{
Console.WriteLine("Disk=" + disk["Name"]);
EjectVolume(disk["Name"].ToString());
}
}
Console.WriteLine("Serial=" + new
ManagementObject("Win32_PhysicalMedia.Tag='" + drive["DeviceID"] +
"'")["SerialNumber"]);
}
}
"Vincent" a écrit dans le message de
news:Même que l'ejection de la clé usb en mode "safe" je suis preneur
Vincent
"Merlin" a écrit dans le message de news:ps : s'il y a 20 lignes je suis preneur quand même
je dirais que même jusqu'à 40 c'est encore assez rentable :-)
--
///3rL1n____
Par rapport à la doc microsoft ( du lien que tu m'as donné ) tout est ok :
toutes les étapes renvoient OK.
Si j'ouvre l'explorateur de fichier, le lecteur est toujours présent même
s'il est sans données
(si je clique dessus , message = insérez un disque dans le lecteur F:)
Faut le faire disparaître !!!! :)
Vincent
"Vincent" a écrit dans le message de news:Merci pour ton aide,
j'ai suivi les directives du lien
http://support.microsoft.com/default.aspx?scid=kb;en-us;165721
j'obtien des résultats. mais pour
DeviceIoControl(hDrive,FSCTL_DISMOUNT_VOLUME,IntPtr.Zero,0,IntPtr.Zero,0,ref
octet_retour,IntPtr.Zero)
Renvoi l'erreur 112 sous 2000
et
sous xp : err 24 , Le programme a émis une commande de longueur
incorrecte
Je sais pas trop quoi faire.
La clé est prète à être éjectée pas l'utilisateur, mais à ce moment une
fenêtre (sous 2000)
indique qu'on a retiré la clé brusquement et il faut cliquer ok pour
continuer !
Le client dit : non j'en veut pas
je suis ds le caca :)
Vincent
"Simon Mourier [SoftFluent]" a écrit dans
le message de news:Malheureusement, la norme USB n'impose pas de numéro de série pour un
périphérique, quel qu'il soit. Etes vous sûr que le disque en question a
un numéro de série?
voir ici:
http://blogs.msdn.com/oldnewthing/archive/2004/11/10/255047.aspx
Simon.
www.softfluent.com
"Vincent" a écrit dans le message de
news:Je découvre ManagementObject,
new ManagementObject("Win32_PhysicalMedia.Tag='" + drive["DeviceID"] +
"'")["SerialNumber"] semble ne rien retourner ?
Vincent
"Vincent" a écrit dans le message de
news:Je vais voir tout ça, il y en a déjà une bonne partie que j'utilise :
Createfile,deviceiocontrol,closehandle...
je regarde avec beaucoup d'interet ....
Merci
A bientot pour le cpte rendu :)
Vincent
"Simon Mourier [SoftFluent]" a écrit
dans le message de news:arggghhh .... 51 lignes (dans un éditeur avec plus de 80 colonnes)...
bon je n'ai pas le safe, mais il faut juste adapter complètement
http://support.microsoft.com/default.aspx?scid=kb;en-us;165721
faut bosser maintenant :-)
Simon
www.softfluent.com
[DllImport("Kernel32.dll", SetLastError = true)]
static extern IntPtr CreateFile(string lpFileName, int
dwDesiredAccess,
int dwShareMode, IntPtr lpSecurityAttributes, int
dwCreationDisposition, int
dwFlagsAndAttributes, IntPtr hTemplateFile);
[DllImport("Kernel32.dll", SetLastError = true)]
static extern bool DeviceIoControl(IntPtr hDevice, int
dwIoControlCode,
IntPtr lpInBuffer, int nInBufferSize, IntPtr lpOutBuffer, int
nOutBufferSize, out int lpBytesReturned, IntPtr lpOverlapped);
[DllImport("Kernel32.dll", SetLastError = true)]
static extern bool CloseHandle(IntPtr hObject);
const int GENERIC_READ = unchecked((int)0x80000000);
const int FILE_SHARE_READ = 0x00000001;
const int FILE_SHARE_WRITE = 0x00000002;
const int OPEN_EXISTING = 3;
const int IOCTL_STORAGE_EJECT_MEDIA = 0x2D4808;
static bool EjectVolume(string volumeName)
{
IntPtr hFile = CreateFile(@"." + volumeName, GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE, IntPtr.Zero, OPEN_EXISTING, 0,
IntPtr.Zero);
if (hFile == new IntPtr(-1))
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
try
{
int bytesReturned;
if (!DeviceIoControl(hFile, IOCTL_STORAGE_EJECT_MEDIA,
IntPtr.Zero, 0,
IntPtr.Zero, 0, out bytesReturned, IntPtr.Zero))
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
}
finally
{
CloseHandle(hFile);
}
return false;
}
static void EjectAllUsbVolumes()
{
foreach(ManagementObject drive in new
ManagementObjectSearcher("select *
from Win32_DiskDrive where InterfaceType='USB'").Get())
{
foreach(ManagementObject partition in new
ManagementObjectSearcher("ASSOCIATORS OF {Win32_DiskDrive.DeviceID='"
+
drive["DeviceID"] + "'} WHERE AssocClass >>>>>> Win32_DiskDriveToDiskPartition").Get())
{
Console.WriteLine("Partition=" + partition["Name"]);
foreach(ManagementObject disk in new
ManagementObjectSearcher("ASSOCIATORS OF
{Win32_DiskPartition.DeviceID='" +
partition["DeviceID"] + "'} WHERE AssocClass >>>>>> Win32_LogicalDiskToPartition").Get())
{
Console.WriteLine("Disk=" + disk["Name"]);
EjectVolume(disk["Name"].ToString());
}
}
Console.WriteLine("Serial=" + new
ManagementObject("Win32_PhysicalMedia.Tag='" + drive["DeviceID"] +
"'")["SerialNumber"]);
}
}
"Vincent" a écrit dans le message de
news:Même que l'ejection de la clé usb en mode "safe" je suis preneur
Vincent
"Merlin" a écrit dans le message de news:ps : s'il y a 20 lignes je suis preneur quand même
je dirais que même jusqu'à 40 c'est encore assez rentable :-)
--
///3rL1n____
Par rapport à la doc microsoft ( du lien que tu m'as donné ) tout est ok :
toutes les étapes renvoient OK.
Si j'ouvre l'explorateur de fichier, le lecteur est toujours présent même
s'il est sans données
(si je clique dessus , message = insérez un disque dans le lecteur F:)
Faut le faire disparaître !!!! :)
Vincent
"Vincent" <vincent31spamaoter@wanadoo.fr> a écrit dans le message de news:
OueVC4eSGHA.1728@TK2MSFTNGP11.phx.gbl...
Merci pour ton aide,
j'ai suivi les directives du lien
http://support.microsoft.com/default.aspx?scid=kb;en-us;165721
j'obtien des résultats. mais pour
DeviceIoControl(hDrive,FSCTL_DISMOUNT_VOLUME,IntPtr.Zero,0,IntPtr.Zero,0,ref
octet_retour,IntPtr.Zero)
Renvoi l'erreur 112 sous 2000
et
sous xp : err 24 , Le programme a émis une commande de longueur
incorrecte
Je sais pas trop quoi faire.
La clé est prète à être éjectée pas l'utilisateur, mais à ce moment une
fenêtre (sous 2000)
indique qu'on a retiré la clé brusquement et il faut cliquer ok pour
continuer !
Le client dit : non j'en veut pas
je suis ds le caca :)
Vincent
"Simon Mourier [SoftFluent]" <simon.mourier@mycompany.com> a écrit dans
le message de news: uYcWAGaSGHA.5728@tk2msftngp13.phx.gbl...
Malheureusement, la norme USB n'impose pas de numéro de série pour un
périphérique, quel qu'il soit. Etes vous sûr que le disque en question a
un numéro de série?
voir ici:
http://blogs.msdn.com/oldnewthing/archive/2004/11/10/255047.aspx
Simon.
www.softfluent.com
"Vincent" <vincent31spamaoter@wanadoo.fr> a écrit dans le message de
news: elzYl0XSGHA.5736@TK2MSFTNGP10.phx.gbl...
Je découvre ManagementObject,
new ManagementObject("Win32_PhysicalMedia.Tag='" + drive["DeviceID"] +
"'")["SerialNumber"] semble ne rien retourner ?
Vincent
"Vincent" <vincent31spamaoter@wanadoo.fr> a écrit dans le message de
news: eem2XkRSGHA.5552@TK2MSFTNGP14.phx.gbl...
Je vais voir tout ça, il y en a déjà une bonne partie que j'utilise :
Createfile,deviceiocontrol,closehandle...
je regarde avec beaucoup d'interet ....
Merci
A bientot pour le cpte rendu :)
Vincent
"Simon Mourier [SoftFluent]" <simon.mourier@mycompany.com> a écrit
dans le message de news: ucZCTAISGHA.2300@TK2MSFTNGP11.phx.gbl...
arggghhh .... 51 lignes (dans un éditeur avec plus de 80 colonnes)...
bon je n'ai pas le safe, mais il faut juste adapter complètement
http://support.microsoft.com/default.aspx?scid=kb;en-us;165721
faut bosser maintenant :-)
Simon
www.softfluent.com
[DllImport("Kernel32.dll", SetLastError = true)]
static extern IntPtr CreateFile(string lpFileName, int
dwDesiredAccess,
int dwShareMode, IntPtr lpSecurityAttributes, int
dwCreationDisposition, int
dwFlagsAndAttributes, IntPtr hTemplateFile);
[DllImport("Kernel32.dll", SetLastError = true)]
static extern bool DeviceIoControl(IntPtr hDevice, int
dwIoControlCode,
IntPtr lpInBuffer, int nInBufferSize, IntPtr lpOutBuffer, int
nOutBufferSize, out int lpBytesReturned, IntPtr lpOverlapped);
[DllImport("Kernel32.dll", SetLastError = true)]
static extern bool CloseHandle(IntPtr hObject);
const int GENERIC_READ = unchecked((int)0x80000000);
const int FILE_SHARE_READ = 0x00000001;
const int FILE_SHARE_WRITE = 0x00000002;
const int OPEN_EXISTING = 3;
const int IOCTL_STORAGE_EJECT_MEDIA = 0x2D4808;
static bool EjectVolume(string volumeName)
{
IntPtr hFile = CreateFile(@"\." + volumeName, GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE, IntPtr.Zero, OPEN_EXISTING, 0,
IntPtr.Zero);
if (hFile == new IntPtr(-1))
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
try
{
int bytesReturned;
if (!DeviceIoControl(hFile, IOCTL_STORAGE_EJECT_MEDIA,
IntPtr.Zero, 0,
IntPtr.Zero, 0, out bytesReturned, IntPtr.Zero))
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
}
finally
{
CloseHandle(hFile);
}
return false;
}
static void EjectAllUsbVolumes()
{
foreach(ManagementObject drive in new
ManagementObjectSearcher("select *
from Win32_DiskDrive where InterfaceType='USB'").Get())
{
foreach(ManagementObject partition in new
ManagementObjectSearcher("ASSOCIATORS OF {Win32_DiskDrive.DeviceID='"
+
drive["DeviceID"] + "'} WHERE AssocClass >>>>>> Win32_DiskDriveToDiskPartition").Get())
{
Console.WriteLine("Partition=" + partition["Name"]);
foreach(ManagementObject disk in new
ManagementObjectSearcher("ASSOCIATORS OF
{Win32_DiskPartition.DeviceID='" +
partition["DeviceID"] + "'} WHERE AssocClass >>>>>> Win32_LogicalDiskToPartition").Get())
{
Console.WriteLine("Disk=" + disk["Name"]);
EjectVolume(disk["Name"].ToString());
}
}
Console.WriteLine("Serial=" + new
ManagementObject("Win32_PhysicalMedia.Tag='" + drive["DeviceID"] +
"'")["SerialNumber"]);
}
}
"Vincent" <vincent31spamaoter@wanadoo.fr> a écrit dans le message de
news:
u3e7AdFSGHA.4384@tk2msftngp13.phx.gbl...
Même que l'ejection de la clé usb en mode "safe" je suis preneur
Vincent
"Merlin" <Merlin@LesFees.Net> a écrit dans le message de news:
mn.79327d639749c88b.18651@LesFees.Net...
ps : s'il y a 20 lignes je suis preneur quand même
je dirais que même jusqu'à 40 c'est encore assez rentable :-)
--
///\3rL1n____
Par rapport à la doc microsoft ( du lien que tu m'as donné ) tout est ok :
toutes les étapes renvoient OK.
Si j'ouvre l'explorateur de fichier, le lecteur est toujours présent même
s'il est sans données
(si je clique dessus , message = insérez un disque dans le lecteur F:)
Faut le faire disparaître !!!! :)
Vincent
"Vincent" a écrit dans le message de news:Merci pour ton aide,
j'ai suivi les directives du lien
http://support.microsoft.com/default.aspx?scid=kb;en-us;165721
j'obtien des résultats. mais pour
DeviceIoControl(hDrive,FSCTL_DISMOUNT_VOLUME,IntPtr.Zero,0,IntPtr.Zero,0,ref
octet_retour,IntPtr.Zero)
Renvoi l'erreur 112 sous 2000
et
sous xp : err 24 , Le programme a émis une commande de longueur
incorrecte
Je sais pas trop quoi faire.
La clé est prète à être éjectée pas l'utilisateur, mais à ce moment une
fenêtre (sous 2000)
indique qu'on a retiré la clé brusquement et il faut cliquer ok pour
continuer !
Le client dit : non j'en veut pas
je suis ds le caca :)
Vincent
"Simon Mourier [SoftFluent]" a écrit dans
le message de news:Malheureusement, la norme USB n'impose pas de numéro de série pour un
périphérique, quel qu'il soit. Etes vous sûr que le disque en question a
un numéro de série?
voir ici:
http://blogs.msdn.com/oldnewthing/archive/2004/11/10/255047.aspx
Simon.
www.softfluent.com
"Vincent" a écrit dans le message de
news:Je découvre ManagementObject,
new ManagementObject("Win32_PhysicalMedia.Tag='" + drive["DeviceID"] +
"'")["SerialNumber"] semble ne rien retourner ?
Vincent
"Vincent" a écrit dans le message de
news:Je vais voir tout ça, il y en a déjà une bonne partie que j'utilise :
Createfile,deviceiocontrol,closehandle...
je regarde avec beaucoup d'interet ....
Merci
A bientot pour le cpte rendu :)
Vincent
"Simon Mourier [SoftFluent]" a écrit
dans le message de news:arggghhh .... 51 lignes (dans un éditeur avec plus de 80 colonnes)...
bon je n'ai pas le safe, mais il faut juste adapter complètement
http://support.microsoft.com/default.aspx?scid=kb;en-us;165721
faut bosser maintenant :-)
Simon
www.softfluent.com
[DllImport("Kernel32.dll", SetLastError = true)]
static extern IntPtr CreateFile(string lpFileName, int
dwDesiredAccess,
int dwShareMode, IntPtr lpSecurityAttributes, int
dwCreationDisposition, int
dwFlagsAndAttributes, IntPtr hTemplateFile);
[DllImport("Kernel32.dll", SetLastError = true)]
static extern bool DeviceIoControl(IntPtr hDevice, int
dwIoControlCode,
IntPtr lpInBuffer, int nInBufferSize, IntPtr lpOutBuffer, int
nOutBufferSize, out int lpBytesReturned, IntPtr lpOverlapped);
[DllImport("Kernel32.dll", SetLastError = true)]
static extern bool CloseHandle(IntPtr hObject);
const int GENERIC_READ = unchecked((int)0x80000000);
const int FILE_SHARE_READ = 0x00000001;
const int FILE_SHARE_WRITE = 0x00000002;
const int OPEN_EXISTING = 3;
const int IOCTL_STORAGE_EJECT_MEDIA = 0x2D4808;
static bool EjectVolume(string volumeName)
{
IntPtr hFile = CreateFile(@"." + volumeName, GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE, IntPtr.Zero, OPEN_EXISTING, 0,
IntPtr.Zero);
if (hFile == new IntPtr(-1))
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
try
{
int bytesReturned;
if (!DeviceIoControl(hFile, IOCTL_STORAGE_EJECT_MEDIA,
IntPtr.Zero, 0,
IntPtr.Zero, 0, out bytesReturned, IntPtr.Zero))
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
}
finally
{
CloseHandle(hFile);
}
return false;
}
static void EjectAllUsbVolumes()
{
foreach(ManagementObject drive in new
ManagementObjectSearcher("select *
from Win32_DiskDrive where InterfaceType='USB'").Get())
{
foreach(ManagementObject partition in new
ManagementObjectSearcher("ASSOCIATORS OF {Win32_DiskDrive.DeviceID='"
+
drive["DeviceID"] + "'} WHERE AssocClass >>>>>> Win32_DiskDriveToDiskPartition").Get())
{
Console.WriteLine("Partition=" + partition["Name"]);
foreach(ManagementObject disk in new
ManagementObjectSearcher("ASSOCIATORS OF
{Win32_DiskPartition.DeviceID='" +
partition["DeviceID"] + "'} WHERE AssocClass >>>>>> Win32_LogicalDiskToPartition").Get())
{
Console.WriteLine("Disk=" + disk["Name"]);
EjectVolume(disk["Name"].ToString());
}
}
Console.WriteLine("Serial=" + new
ManagementObject("Win32_PhysicalMedia.Tag='" + drive["DeviceID"] +
"'")["SerialNumber"]);
}
}
"Vincent" a écrit dans le message de
news:Même que l'ejection de la clé usb en mode "safe" je suis preneur
Vincent
"Merlin" a écrit dans le message de news:ps : s'il y a 20 lignes je suis preneur quand même
je dirais que même jusqu'à 40 c'est encore assez rentable :-)
--
///3rL1n____
Apres de longues recherches :) , SurpriseRemovalOK est la clé de tout !
quelqu'un sait'il comment passer cette valeur à 1 en C# ?
Merci
Vincent
"Vincent" a écrit dans le message de news:Par rapport à la doc microsoft ( du lien que tu m'as donné ) tout est ok
:
toutes les étapes renvoient OK.
Si j'ouvre l'explorateur de fichier, le lecteur est toujours présent même
s'il est sans données
(si je clique dessus , message = insérez un disque dans le lecteur F:)
Faut le faire disparaître !!!! :)
Vincent
"Vincent" a écrit dans le message de
news:Merci pour ton aide,
j'ai suivi les directives du lien
http://support.microsoft.com/default.aspx?scid=kb;en-us;165721
j'obtien des résultats. mais pour
DeviceIoControl(hDrive,FSCTL_DISMOUNT_VOLUME,IntPtr.Zero,0,IntPtr.Zero,0,ref
octet_retour,IntPtr.Zero)
Renvoi l'erreur 112 sous 2000
et
sous xp : err 24 , Le programme a émis une commande de longueur
incorrecte
Je sais pas trop quoi faire.
La clé est prète à être éjectée pas l'utilisateur, mais à ce moment une
fenêtre (sous 2000)
indique qu'on a retiré la clé brusquement et il faut cliquer ok pour
continuer !
Le client dit : non j'en veut pas
je suis ds le caca :)
Vincent
"Simon Mourier [SoftFluent]" a écrit dans
le message de news:Malheureusement, la norme USB n'impose pas de numéro de série pour un
périphérique, quel qu'il soit. Etes vous sûr que le disque en question
a un numéro de série?
voir ici:
http://blogs.msdn.com/oldnewthing/archive/2004/11/10/255047.aspx
Simon.
www.softfluent.com
"Vincent" a écrit dans le message de
news:Je découvre ManagementObject,
new ManagementObject("Win32_PhysicalMedia.Tag='" + drive["DeviceID"] +
"'")["SerialNumber"] semble ne rien retourner ?
Vincent
"Vincent" a écrit dans le message de
news:Je vais voir tout ça, il y en a déjà une bonne partie que j'utilise :
Createfile,deviceiocontrol,closehandle...
je regarde avec beaucoup d'interet ....
Merci
A bientot pour le cpte rendu :)
Vincent
"Simon Mourier [SoftFluent]" a écrit
dans le message de news:arggghhh .... 51 lignes (dans un éditeur avec plus de 80
colonnes)...
bon je n'ai pas le safe, mais il faut juste adapter complètement
http://support.microsoft.com/default.aspx?scid=kb;en-us;165721
faut bosser maintenant :-)
Simon
www.softfluent.com
[DllImport("Kernel32.dll", SetLastError = true)]
static extern IntPtr CreateFile(string lpFileName, int
dwDesiredAccess,
int dwShareMode, IntPtr lpSecurityAttributes, int
dwCreationDisposition, int
dwFlagsAndAttributes, IntPtr hTemplateFile);
[DllImport("Kernel32.dll", SetLastError = true)]
static extern bool DeviceIoControl(IntPtr hDevice, int
dwIoControlCode,
IntPtr lpInBuffer, int nInBufferSize, IntPtr lpOutBuffer, int
nOutBufferSize, out int lpBytesReturned, IntPtr lpOverlapped);
[DllImport("Kernel32.dll", SetLastError = true)]
static extern bool CloseHandle(IntPtr hObject);
const int GENERIC_READ = unchecked((int)0x80000000);
const int FILE_SHARE_READ = 0x00000001;
const int FILE_SHARE_WRITE = 0x00000002;
const int OPEN_EXISTING = 3;
const int IOCTL_STORAGE_EJECT_MEDIA = 0x2D4808;
static bool EjectVolume(string volumeName)
{
IntPtr hFile = CreateFile(@"." + volumeName, GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE, IntPtr.Zero, OPEN_EXISTING, 0,
IntPtr.Zero);
if (hFile == new IntPtr(-1))
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
try
{
int bytesReturned;
if (!DeviceIoControl(hFile, IOCTL_STORAGE_EJECT_MEDIA,
IntPtr.Zero, 0,
IntPtr.Zero, 0, out bytesReturned, IntPtr.Zero))
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
}
finally
{
CloseHandle(hFile);
}
return false;
}
static void EjectAllUsbVolumes()
{
foreach(ManagementObject drive in new
ManagementObjectSearcher("select *
from Win32_DiskDrive where InterfaceType='USB'").Get())
{
foreach(ManagementObject partition in new
ManagementObjectSearcher("ASSOCIATORS OF
{Win32_DiskDrive.DeviceID='" +
drive["DeviceID"] + "'} WHERE AssocClass >>>>>>> Win32_DiskDriveToDiskPartition").Get())
{
Console.WriteLine("Partition=" + partition["Name"]);
foreach(ManagementObject disk in new
ManagementObjectSearcher("ASSOCIATORS OF
{Win32_DiskPartition.DeviceID='" +
partition["DeviceID"] + "'} WHERE AssocClass >>>>>>> Win32_LogicalDiskToPartition").Get())
{
Console.WriteLine("Disk=" + disk["Name"]);
EjectVolume(disk["Name"].ToString());
}
}
Console.WriteLine("Serial=" + new
ManagementObject("Win32_PhysicalMedia.Tag='" + drive["DeviceID"] +
"'")["SerialNumber"]);
}
}
"Vincent" a écrit dans le message de
news:Même que l'ejection de la clé usb en mode "safe" je suis preneur
Vincent
"Merlin" a écrit dans le message de news:ps : s'il y a 20 lignes je suis preneur quand même
je dirais que même jusqu'à 40 c'est encore assez rentable :-)
--
///3rL1n____
Apres de longues recherches :) , SurpriseRemovalOK est la clé de tout !
quelqu'un sait'il comment passer cette valeur à 1 en C# ?
Merci
Vincent
"Vincent" <vincent31spamaoter@wanadoo.fr> a écrit dans le message de news:
Ofe7pAhSGHA.4492@TK2MSFTNGP09.phx.gbl...
Par rapport à la doc microsoft ( du lien que tu m'as donné ) tout est ok
:
toutes les étapes renvoient OK.
Si j'ouvre l'explorateur de fichier, le lecteur est toujours présent même
s'il est sans données
(si je clique dessus , message = insérez un disque dans le lecteur F:)
Faut le faire disparaître !!!! :)
Vincent
"Vincent" <vincent31spamaoter@wanadoo.fr> a écrit dans le message de
news: OueVC4eSGHA.1728@TK2MSFTNGP11.phx.gbl...
Merci pour ton aide,
j'ai suivi les directives du lien
http://support.microsoft.com/default.aspx?scid=kb;en-us;165721
j'obtien des résultats. mais pour
DeviceIoControl(hDrive,FSCTL_DISMOUNT_VOLUME,IntPtr.Zero,0,IntPtr.Zero,0,ref
octet_retour,IntPtr.Zero)
Renvoi l'erreur 112 sous 2000
et
sous xp : err 24 , Le programme a émis une commande de longueur
incorrecte
Je sais pas trop quoi faire.
La clé est prète à être éjectée pas l'utilisateur, mais à ce moment une
fenêtre (sous 2000)
indique qu'on a retiré la clé brusquement et il faut cliquer ok pour
continuer !
Le client dit : non j'en veut pas
je suis ds le caca :)
Vincent
"Simon Mourier [SoftFluent]" <simon.mourier@mycompany.com> a écrit dans
le message de news: uYcWAGaSGHA.5728@tk2msftngp13.phx.gbl...
Malheureusement, la norme USB n'impose pas de numéro de série pour un
périphérique, quel qu'il soit. Etes vous sûr que le disque en question
a un numéro de série?
voir ici:
http://blogs.msdn.com/oldnewthing/archive/2004/11/10/255047.aspx
Simon.
www.softfluent.com
"Vincent" <vincent31spamaoter@wanadoo.fr> a écrit dans le message de
news: elzYl0XSGHA.5736@TK2MSFTNGP10.phx.gbl...
Je découvre ManagementObject,
new ManagementObject("Win32_PhysicalMedia.Tag='" + drive["DeviceID"] +
"'")["SerialNumber"] semble ne rien retourner ?
Vincent
"Vincent" <vincent31spamaoter@wanadoo.fr> a écrit dans le message de
news: eem2XkRSGHA.5552@TK2MSFTNGP14.phx.gbl...
Je vais voir tout ça, il y en a déjà une bonne partie que j'utilise :
Createfile,deviceiocontrol,closehandle...
je regarde avec beaucoup d'interet ....
Merci
A bientot pour le cpte rendu :)
Vincent
"Simon Mourier [SoftFluent]" <simon.mourier@mycompany.com> a écrit
dans le message de news: ucZCTAISGHA.2300@TK2MSFTNGP11.phx.gbl...
arggghhh .... 51 lignes (dans un éditeur avec plus de 80
colonnes)...
bon je n'ai pas le safe, mais il faut juste adapter complètement
http://support.microsoft.com/default.aspx?scid=kb;en-us;165721
faut bosser maintenant :-)
Simon
www.softfluent.com
[DllImport("Kernel32.dll", SetLastError = true)]
static extern IntPtr CreateFile(string lpFileName, int
dwDesiredAccess,
int dwShareMode, IntPtr lpSecurityAttributes, int
dwCreationDisposition, int
dwFlagsAndAttributes, IntPtr hTemplateFile);
[DllImport("Kernel32.dll", SetLastError = true)]
static extern bool DeviceIoControl(IntPtr hDevice, int
dwIoControlCode,
IntPtr lpInBuffer, int nInBufferSize, IntPtr lpOutBuffer, int
nOutBufferSize, out int lpBytesReturned, IntPtr lpOverlapped);
[DllImport("Kernel32.dll", SetLastError = true)]
static extern bool CloseHandle(IntPtr hObject);
const int GENERIC_READ = unchecked((int)0x80000000);
const int FILE_SHARE_READ = 0x00000001;
const int FILE_SHARE_WRITE = 0x00000002;
const int OPEN_EXISTING = 3;
const int IOCTL_STORAGE_EJECT_MEDIA = 0x2D4808;
static bool EjectVolume(string volumeName)
{
IntPtr hFile = CreateFile(@"\." + volumeName, GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE, IntPtr.Zero, OPEN_EXISTING, 0,
IntPtr.Zero);
if (hFile == new IntPtr(-1))
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
try
{
int bytesReturned;
if (!DeviceIoControl(hFile, IOCTL_STORAGE_EJECT_MEDIA,
IntPtr.Zero, 0,
IntPtr.Zero, 0, out bytesReturned, IntPtr.Zero))
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
}
finally
{
CloseHandle(hFile);
}
return false;
}
static void EjectAllUsbVolumes()
{
foreach(ManagementObject drive in new
ManagementObjectSearcher("select *
from Win32_DiskDrive where InterfaceType='USB'").Get())
{
foreach(ManagementObject partition in new
ManagementObjectSearcher("ASSOCIATORS OF
{Win32_DiskDrive.DeviceID='" +
drive["DeviceID"] + "'} WHERE AssocClass >>>>>>> Win32_DiskDriveToDiskPartition").Get())
{
Console.WriteLine("Partition=" + partition["Name"]);
foreach(ManagementObject disk in new
ManagementObjectSearcher("ASSOCIATORS OF
{Win32_DiskPartition.DeviceID='" +
partition["DeviceID"] + "'} WHERE AssocClass >>>>>>> Win32_LogicalDiskToPartition").Get())
{
Console.WriteLine("Disk=" + disk["Name"]);
EjectVolume(disk["Name"].ToString());
}
}
Console.WriteLine("Serial=" + new
ManagementObject("Win32_PhysicalMedia.Tag='" + drive["DeviceID"] +
"'")["SerialNumber"]);
}
}
"Vincent" <vincent31spamaoter@wanadoo.fr> a écrit dans le message de
news:
u3e7AdFSGHA.4384@tk2msftngp13.phx.gbl...
Même que l'ejection de la clé usb en mode "safe" je suis preneur
Vincent
"Merlin" <Merlin@LesFees.Net> a écrit dans le message de news:
mn.79327d639749c88b.18651@LesFees.Net...
ps : s'il y a 20 lignes je suis preneur quand même
je dirais que même jusqu'à 40 c'est encore assez rentable :-)
--
///\3rL1n____
Apres de longues recherches :) , SurpriseRemovalOK est la clé de tout !
quelqu'un sait'il comment passer cette valeur à 1 en C# ?
Merci
Vincent
"Vincent" a écrit dans le message de news:Par rapport à la doc microsoft ( du lien que tu m'as donné ) tout est ok
:
toutes les étapes renvoient OK.
Si j'ouvre l'explorateur de fichier, le lecteur est toujours présent même
s'il est sans données
(si je clique dessus , message = insérez un disque dans le lecteur F:)
Faut le faire disparaître !!!! :)
Vincent
"Vincent" a écrit dans le message de
news:Merci pour ton aide,
j'ai suivi les directives du lien
http://support.microsoft.com/default.aspx?scid=kb;en-us;165721
j'obtien des résultats. mais pour
DeviceIoControl(hDrive,FSCTL_DISMOUNT_VOLUME,IntPtr.Zero,0,IntPtr.Zero,0,ref
octet_retour,IntPtr.Zero)
Renvoi l'erreur 112 sous 2000
et
sous xp : err 24 , Le programme a émis une commande de longueur
incorrecte
Je sais pas trop quoi faire.
La clé est prète à être éjectée pas l'utilisateur, mais à ce moment une
fenêtre (sous 2000)
indique qu'on a retiré la clé brusquement et il faut cliquer ok pour
continuer !
Le client dit : non j'en veut pas
je suis ds le caca :)
Vincent
"Simon Mourier [SoftFluent]" a écrit dans
le message de news:Malheureusement, la norme USB n'impose pas de numéro de série pour un
périphérique, quel qu'il soit. Etes vous sûr que le disque en question
a un numéro de série?
voir ici:
http://blogs.msdn.com/oldnewthing/archive/2004/11/10/255047.aspx
Simon.
www.softfluent.com
"Vincent" a écrit dans le message de
news:Je découvre ManagementObject,
new ManagementObject("Win32_PhysicalMedia.Tag='" + drive["DeviceID"] +
"'")["SerialNumber"] semble ne rien retourner ?
Vincent
"Vincent" a écrit dans le message de
news:Je vais voir tout ça, il y en a déjà une bonne partie que j'utilise :
Createfile,deviceiocontrol,closehandle...
je regarde avec beaucoup d'interet ....
Merci
A bientot pour le cpte rendu :)
Vincent
"Simon Mourier [SoftFluent]" a écrit
dans le message de news:arggghhh .... 51 lignes (dans un éditeur avec plus de 80
colonnes)...
bon je n'ai pas le safe, mais il faut juste adapter complètement
http://support.microsoft.com/default.aspx?scid=kb;en-us;165721
faut bosser maintenant :-)
Simon
www.softfluent.com
[DllImport("Kernel32.dll", SetLastError = true)]
static extern IntPtr CreateFile(string lpFileName, int
dwDesiredAccess,
int dwShareMode, IntPtr lpSecurityAttributes, int
dwCreationDisposition, int
dwFlagsAndAttributes, IntPtr hTemplateFile);
[DllImport("Kernel32.dll", SetLastError = true)]
static extern bool DeviceIoControl(IntPtr hDevice, int
dwIoControlCode,
IntPtr lpInBuffer, int nInBufferSize, IntPtr lpOutBuffer, int
nOutBufferSize, out int lpBytesReturned, IntPtr lpOverlapped);
[DllImport("Kernel32.dll", SetLastError = true)]
static extern bool CloseHandle(IntPtr hObject);
const int GENERIC_READ = unchecked((int)0x80000000);
const int FILE_SHARE_READ = 0x00000001;
const int FILE_SHARE_WRITE = 0x00000002;
const int OPEN_EXISTING = 3;
const int IOCTL_STORAGE_EJECT_MEDIA = 0x2D4808;
static bool EjectVolume(string volumeName)
{
IntPtr hFile = CreateFile(@"." + volumeName, GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE, IntPtr.Zero, OPEN_EXISTING, 0,
IntPtr.Zero);
if (hFile == new IntPtr(-1))
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
try
{
int bytesReturned;
if (!DeviceIoControl(hFile, IOCTL_STORAGE_EJECT_MEDIA,
IntPtr.Zero, 0,
IntPtr.Zero, 0, out bytesReturned, IntPtr.Zero))
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
}
finally
{
CloseHandle(hFile);
}
return false;
}
static void EjectAllUsbVolumes()
{
foreach(ManagementObject drive in new
ManagementObjectSearcher("select *
from Win32_DiskDrive where InterfaceType='USB'").Get())
{
foreach(ManagementObject partition in new
ManagementObjectSearcher("ASSOCIATORS OF
{Win32_DiskDrive.DeviceID='" +
drive["DeviceID"] + "'} WHERE AssocClass >>>>>>> Win32_DiskDriveToDiskPartition").Get())
{
Console.WriteLine("Partition=" + partition["Name"]);
foreach(ManagementObject disk in new
ManagementObjectSearcher("ASSOCIATORS OF
{Win32_DiskPartition.DeviceID='" +
partition["DeviceID"] + "'} WHERE AssocClass >>>>>>> Win32_LogicalDiskToPartition").Get())
{
Console.WriteLine("Disk=" + disk["Name"]);
EjectVolume(disk["Name"].ToString());
}
}
Console.WriteLine("Serial=" + new
ManagementObject("Win32_PhysicalMedia.Tag='" + drive["DeviceID"] +
"'")["SerialNumber"]);
}
}
"Vincent" a écrit dans le message de
news:Même que l'ejection de la clé usb en mode "safe" je suis preneur
Vincent
"Merlin" a écrit dans le message de news:ps : s'il y a 20 lignes je suis preneur quand même
je dirais que même jusqu'à 40 c'est encore assez rentable :-)
--
///3rL1n____
C'est du Kernel, donc pas de .NET, donc pas de C#.
Pourquoi ne pas faire un petit Driver en C de base.
--
Paul Bacelar
MVP VC++
"Vincent" wrote in message
news:%Apres de longues recherches :) , SurpriseRemovalOK est la clé de tout !
quelqu'un sait'il comment passer cette valeur à 1 en C# ?
Merci
Vincent
"Vincent" a écrit dans le message de
news:Par rapport à la doc microsoft ( du lien que tu m'as donné ) tout est ok
:
toutes les étapes renvoient OK.
Si j'ouvre l'explorateur de fichier, le lecteur est toujours présent
même s'il est sans données
(si je clique dessus , message = insérez un disque dans le lecteur F:)
Faut le faire disparaître !!!! :)
Vincent
"Vincent" a écrit dans le message de
news:Merci pour ton aide,
j'ai suivi les directives du lien
http://support.microsoft.com/default.aspx?scid=kb;en-us;165721
j'obtien des résultats. mais pour
DeviceIoControl(hDrive,FSCTL_DISMOUNT_VOLUME,IntPtr.Zero,0,IntPtr.Zero,0,ref
octet_retour,IntPtr.Zero)
Renvoi l'erreur 112 sous 2000
et
sous xp : err 24 , Le programme a émis une commande de longueur
incorrecte
Je sais pas trop quoi faire.
La clé est prète à être éjectée pas l'utilisateur, mais à ce moment une
fenêtre (sous 2000)
indique qu'on a retiré la clé brusquement et il faut cliquer ok pour
continuer !
Le client dit : non j'en veut pas
je suis ds le caca :)
Vincent
"Simon Mourier [SoftFluent]" a écrit dans
le message de news:Malheureusement, la norme USB n'impose pas de numéro de série pour un
périphérique, quel qu'il soit. Etes vous sûr que le disque en question
a un numéro de série?
voir ici:
http://blogs.msdn.com/oldnewthing/archive/2004/11/10/255047.aspx
Simon.
www.softfluent.com
"Vincent" a écrit dans le message de
news:Je découvre ManagementObject,
new ManagementObject("Win32_PhysicalMedia.Tag='" + drive["DeviceID"]
+ "'")["SerialNumber"] semble ne rien retourner ?
Vincent
"Vincent" a écrit dans le message de
news:Je vais voir tout ça, il y en a déjà une bonne partie que j'utilise
: Createfile,deviceiocontrol,closehandle...
je regarde avec beaucoup d'interet ....
Merci
A bientot pour le cpte rendu :)
Vincent
"Simon Mourier [SoftFluent]" a écrit
dans le message de news:arggghhh .... 51 lignes (dans un éditeur avec plus de 80
colonnes)...
bon je n'ai pas le safe, mais il faut juste adapter complètement
http://support.microsoft.com/default.aspx?scid=kb;en-us;165721
faut bosser maintenant :-)
Simon
www.softfluent.com
[DllImport("Kernel32.dll", SetLastError = true)]
static extern IntPtr CreateFile(string lpFileName, int
dwDesiredAccess,
int dwShareMode, IntPtr lpSecurityAttributes, int
dwCreationDisposition, int
dwFlagsAndAttributes, IntPtr hTemplateFile);
[DllImport("Kernel32.dll", SetLastError = true)]
static extern bool DeviceIoControl(IntPtr hDevice, int
dwIoControlCode,
IntPtr lpInBuffer, int nInBufferSize, IntPtr lpOutBuffer, int
nOutBufferSize, out int lpBytesReturned, IntPtr lpOverlapped);
[DllImport("Kernel32.dll", SetLastError = true)]
static extern bool CloseHandle(IntPtr hObject);
const int GENERIC_READ = unchecked((int)0x80000000);
const int FILE_SHARE_READ = 0x00000001;
const int FILE_SHARE_WRITE = 0x00000002;
const int OPEN_EXISTING = 3;
const int IOCTL_STORAGE_EJECT_MEDIA = 0x2D4808;
static bool EjectVolume(string volumeName)
{
IntPtr hFile = CreateFile(@"." + volumeName, GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE, IntPtr.Zero, OPEN_EXISTING, 0,
IntPtr.Zero);
if (hFile == new IntPtr(-1))
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
try
{
int bytesReturned;
if (!DeviceIoControl(hFile, IOCTL_STORAGE_EJECT_MEDIA,
IntPtr.Zero, 0,
IntPtr.Zero, 0, out bytesReturned, IntPtr.Zero))
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
}
finally
{
CloseHandle(hFile);
}
return false;
}
static void EjectAllUsbVolumes()
{
foreach(ManagementObject drive in new
ManagementObjectSearcher("select *
from Win32_DiskDrive where InterfaceType='USB'").Get())
{
foreach(ManagementObject partition in new
ManagementObjectSearcher("ASSOCIATORS OF
{Win32_DiskDrive.DeviceID='" +
drive["DeviceID"] + "'} WHERE AssocClass >>>>>>>> Win32_DiskDriveToDiskPartition").Get())
{
Console.WriteLine("Partition=" + partition["Name"]);
foreach(ManagementObject disk in new
ManagementObjectSearcher("ASSOCIATORS OF
{Win32_DiskPartition.DeviceID='" +
partition["DeviceID"] + "'} WHERE AssocClass >>>>>>>> Win32_LogicalDiskToPartition").Get())
{
Console.WriteLine("Disk=" + disk["Name"]);
EjectVolume(disk["Name"].ToString());
}
}
Console.WriteLine("Serial=" + new
ManagementObject("Win32_PhysicalMedia.Tag='" + drive["DeviceID"] +
"'")["SerialNumber"]);
}
}
"Vincent" a écrit dans le message
de news:Même que l'ejection de la clé usb en mode "safe" je suis preneur
Vincent
"Merlin" a écrit dans le message de news:ps : s'il y a 20 lignes je suis preneur quand même
je dirais que même jusqu'à 40 c'est encore assez rentable :-)
--
///3rL1n____
C'est du Kernel, donc pas de .NET, donc pas de C#.
Pourquoi ne pas faire un petit Driver en C de base.
--
Paul Bacelar
MVP VC++
"Vincent" <vincent31spamaoter@wanadoo.fr> wrote in message
news:%23TJ6bolSGHA.5036@TK2MSFTNGP12.phx.gbl...
Apres de longues recherches :) , SurpriseRemovalOK est la clé de tout !
quelqu'un sait'il comment passer cette valeur à 1 en C# ?
Merci
Vincent
"Vincent" <vincent31spamaoter@wanadoo.fr> a écrit dans le message de
news: Ofe7pAhSGHA.4492@TK2MSFTNGP09.phx.gbl...
Par rapport à la doc microsoft ( du lien que tu m'as donné ) tout est ok
:
toutes les étapes renvoient OK.
Si j'ouvre l'explorateur de fichier, le lecteur est toujours présent
même s'il est sans données
(si je clique dessus , message = insérez un disque dans le lecteur F:)
Faut le faire disparaître !!!! :)
Vincent
"Vincent" <vincent31spamaoter@wanadoo.fr> a écrit dans le message de
news: OueVC4eSGHA.1728@TK2MSFTNGP11.phx.gbl...
Merci pour ton aide,
j'ai suivi les directives du lien
http://support.microsoft.com/default.aspx?scid=kb;en-us;165721
j'obtien des résultats. mais pour
DeviceIoControl(hDrive,FSCTL_DISMOUNT_VOLUME,IntPtr.Zero,0,IntPtr.Zero,0,ref
octet_retour,IntPtr.Zero)
Renvoi l'erreur 112 sous 2000
et
sous xp : err 24 , Le programme a émis une commande de longueur
incorrecte
Je sais pas trop quoi faire.
La clé est prète à être éjectée pas l'utilisateur, mais à ce moment une
fenêtre (sous 2000)
indique qu'on a retiré la clé brusquement et il faut cliquer ok pour
continuer !
Le client dit : non j'en veut pas
je suis ds le caca :)
Vincent
"Simon Mourier [SoftFluent]" <simon.mourier@mycompany.com> a écrit dans
le message de news: uYcWAGaSGHA.5728@tk2msftngp13.phx.gbl...
Malheureusement, la norme USB n'impose pas de numéro de série pour un
périphérique, quel qu'il soit. Etes vous sûr que le disque en question
a un numéro de série?
voir ici:
http://blogs.msdn.com/oldnewthing/archive/2004/11/10/255047.aspx
Simon.
www.softfluent.com
"Vincent" <vincent31spamaoter@wanadoo.fr> a écrit dans le message de
news: elzYl0XSGHA.5736@TK2MSFTNGP10.phx.gbl...
Je découvre ManagementObject,
new ManagementObject("Win32_PhysicalMedia.Tag='" + drive["DeviceID"]
+ "'")["SerialNumber"] semble ne rien retourner ?
Vincent
"Vincent" <vincent31spamaoter@wanadoo.fr> a écrit dans le message de
news: eem2XkRSGHA.5552@TK2MSFTNGP14.phx.gbl...
Je vais voir tout ça, il y en a déjà une bonne partie que j'utilise
: Createfile,deviceiocontrol,closehandle...
je regarde avec beaucoup d'interet ....
Merci
A bientot pour le cpte rendu :)
Vincent
"Simon Mourier [SoftFluent]" <simon.mourier@mycompany.com> a écrit
dans le message de news: ucZCTAISGHA.2300@TK2MSFTNGP11.phx.gbl...
arggghhh .... 51 lignes (dans un éditeur avec plus de 80
colonnes)...
bon je n'ai pas le safe, mais il faut juste adapter complètement
http://support.microsoft.com/default.aspx?scid=kb;en-us;165721
faut bosser maintenant :-)
Simon
www.softfluent.com
[DllImport("Kernel32.dll", SetLastError = true)]
static extern IntPtr CreateFile(string lpFileName, int
dwDesiredAccess,
int dwShareMode, IntPtr lpSecurityAttributes, int
dwCreationDisposition, int
dwFlagsAndAttributes, IntPtr hTemplateFile);
[DllImport("Kernel32.dll", SetLastError = true)]
static extern bool DeviceIoControl(IntPtr hDevice, int
dwIoControlCode,
IntPtr lpInBuffer, int nInBufferSize, IntPtr lpOutBuffer, int
nOutBufferSize, out int lpBytesReturned, IntPtr lpOverlapped);
[DllImport("Kernel32.dll", SetLastError = true)]
static extern bool CloseHandle(IntPtr hObject);
const int GENERIC_READ = unchecked((int)0x80000000);
const int FILE_SHARE_READ = 0x00000001;
const int FILE_SHARE_WRITE = 0x00000002;
const int OPEN_EXISTING = 3;
const int IOCTL_STORAGE_EJECT_MEDIA = 0x2D4808;
static bool EjectVolume(string volumeName)
{
IntPtr hFile = CreateFile(@"\." + volumeName, GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE, IntPtr.Zero, OPEN_EXISTING, 0,
IntPtr.Zero);
if (hFile == new IntPtr(-1))
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
try
{
int bytesReturned;
if (!DeviceIoControl(hFile, IOCTL_STORAGE_EJECT_MEDIA,
IntPtr.Zero, 0,
IntPtr.Zero, 0, out bytesReturned, IntPtr.Zero))
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
}
finally
{
CloseHandle(hFile);
}
return false;
}
static void EjectAllUsbVolumes()
{
foreach(ManagementObject drive in new
ManagementObjectSearcher("select *
from Win32_DiskDrive where InterfaceType='USB'").Get())
{
foreach(ManagementObject partition in new
ManagementObjectSearcher("ASSOCIATORS OF
{Win32_DiskDrive.DeviceID='" +
drive["DeviceID"] + "'} WHERE AssocClass >>>>>>>> Win32_DiskDriveToDiskPartition").Get())
{
Console.WriteLine("Partition=" + partition["Name"]);
foreach(ManagementObject disk in new
ManagementObjectSearcher("ASSOCIATORS OF
{Win32_DiskPartition.DeviceID='" +
partition["DeviceID"] + "'} WHERE AssocClass >>>>>>>> Win32_LogicalDiskToPartition").Get())
{
Console.WriteLine("Disk=" + disk["Name"]);
EjectVolume(disk["Name"].ToString());
}
}
Console.WriteLine("Serial=" + new
ManagementObject("Win32_PhysicalMedia.Tag='" + drive["DeviceID"] +
"'")["SerialNumber"]);
}
}
"Vincent" <vincent31spamaoter@wanadoo.fr> a écrit dans le message
de news:
u3e7AdFSGHA.4384@tk2msftngp13.phx.gbl...
Même que l'ejection de la clé usb en mode "safe" je suis preneur
Vincent
"Merlin" <Merlin@LesFees.Net> a écrit dans le message de news:
mn.79327d639749c88b.18651@LesFees.Net...
ps : s'il y a 20 lignes je suis preneur quand même
je dirais que même jusqu'à 40 c'est encore assez rentable :-)
--
///\3rL1n____
C'est du Kernel, donc pas de .NET, donc pas de C#.
Pourquoi ne pas faire un petit Driver en C de base.
--
Paul Bacelar
MVP VC++
"Vincent" wrote in message
news:%Apres de longues recherches :) , SurpriseRemovalOK est la clé de tout !
quelqu'un sait'il comment passer cette valeur à 1 en C# ?
Merci
Vincent
"Vincent" a écrit dans le message de
news:Par rapport à la doc microsoft ( du lien que tu m'as donné ) tout est ok
:
toutes les étapes renvoient OK.
Si j'ouvre l'explorateur de fichier, le lecteur est toujours présent
même s'il est sans données
(si je clique dessus , message = insérez un disque dans le lecteur F:)
Faut le faire disparaître !!!! :)
Vincent
"Vincent" a écrit dans le message de
news:Merci pour ton aide,
j'ai suivi les directives du lien
http://support.microsoft.com/default.aspx?scid=kb;en-us;165721
j'obtien des résultats. mais pour
DeviceIoControl(hDrive,FSCTL_DISMOUNT_VOLUME,IntPtr.Zero,0,IntPtr.Zero,0,ref
octet_retour,IntPtr.Zero)
Renvoi l'erreur 112 sous 2000
et
sous xp : err 24 , Le programme a émis une commande de longueur
incorrecte
Je sais pas trop quoi faire.
La clé est prète à être éjectée pas l'utilisateur, mais à ce moment une
fenêtre (sous 2000)
indique qu'on a retiré la clé brusquement et il faut cliquer ok pour
continuer !
Le client dit : non j'en veut pas
je suis ds le caca :)
Vincent
"Simon Mourier [SoftFluent]" a écrit dans
le message de news:Malheureusement, la norme USB n'impose pas de numéro de série pour un
périphérique, quel qu'il soit. Etes vous sûr que le disque en question
a un numéro de série?
voir ici:
http://blogs.msdn.com/oldnewthing/archive/2004/11/10/255047.aspx
Simon.
www.softfluent.com
"Vincent" a écrit dans le message de
news:Je découvre ManagementObject,
new ManagementObject("Win32_PhysicalMedia.Tag='" + drive["DeviceID"]
+ "'")["SerialNumber"] semble ne rien retourner ?
Vincent
"Vincent" a écrit dans le message de
news:Je vais voir tout ça, il y en a déjà une bonne partie que j'utilise
: Createfile,deviceiocontrol,closehandle...
je regarde avec beaucoup d'interet ....
Merci
A bientot pour le cpte rendu :)
Vincent
"Simon Mourier [SoftFluent]" a écrit
dans le message de news:arggghhh .... 51 lignes (dans un éditeur avec plus de 80
colonnes)...
bon je n'ai pas le safe, mais il faut juste adapter complètement
http://support.microsoft.com/default.aspx?scid=kb;en-us;165721
faut bosser maintenant :-)
Simon
www.softfluent.com
[DllImport("Kernel32.dll", SetLastError = true)]
static extern IntPtr CreateFile(string lpFileName, int
dwDesiredAccess,
int dwShareMode, IntPtr lpSecurityAttributes, int
dwCreationDisposition, int
dwFlagsAndAttributes, IntPtr hTemplateFile);
[DllImport("Kernel32.dll", SetLastError = true)]
static extern bool DeviceIoControl(IntPtr hDevice, int
dwIoControlCode,
IntPtr lpInBuffer, int nInBufferSize, IntPtr lpOutBuffer, int
nOutBufferSize, out int lpBytesReturned, IntPtr lpOverlapped);
[DllImport("Kernel32.dll", SetLastError = true)]
static extern bool CloseHandle(IntPtr hObject);
const int GENERIC_READ = unchecked((int)0x80000000);
const int FILE_SHARE_READ = 0x00000001;
const int FILE_SHARE_WRITE = 0x00000002;
const int OPEN_EXISTING = 3;
const int IOCTL_STORAGE_EJECT_MEDIA = 0x2D4808;
static bool EjectVolume(string volumeName)
{
IntPtr hFile = CreateFile(@"." + volumeName, GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE, IntPtr.Zero, OPEN_EXISTING, 0,
IntPtr.Zero);
if (hFile == new IntPtr(-1))
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
try
{
int bytesReturned;
if (!DeviceIoControl(hFile, IOCTL_STORAGE_EJECT_MEDIA,
IntPtr.Zero, 0,
IntPtr.Zero, 0, out bytesReturned, IntPtr.Zero))
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
}
finally
{
CloseHandle(hFile);
}
return false;
}
static void EjectAllUsbVolumes()
{
foreach(ManagementObject drive in new
ManagementObjectSearcher("select *
from Win32_DiskDrive where InterfaceType='USB'").Get())
{
foreach(ManagementObject partition in new
ManagementObjectSearcher("ASSOCIATORS OF
{Win32_DiskDrive.DeviceID='" +
drive["DeviceID"] + "'} WHERE AssocClass >>>>>>>> Win32_DiskDriveToDiskPartition").Get())
{
Console.WriteLine("Partition=" + partition["Name"]);
foreach(ManagementObject disk in new
ManagementObjectSearcher("ASSOCIATORS OF
{Win32_DiskPartition.DeviceID='" +
partition["DeviceID"] + "'} WHERE AssocClass >>>>>>>> Win32_LogicalDiskToPartition").Get())
{
Console.WriteLine("Disk=" + disk["Name"]);
EjectVolume(disk["Name"].ToString());
}
}
Console.WriteLine("Serial=" + new
ManagementObject("Win32_PhysicalMedia.Tag='" + drive["DeviceID"] +
"'")["SerialNumber"]);
}
}
"Vincent" a écrit dans le message
de news:Même que l'ejection de la clé usb en mode "safe" je suis preneur
Vincent
"Merlin" a écrit dans le message de news:ps : s'il y a 20 lignes je suis preneur quand même
je dirais que même jusqu'à 40 c'est encore assez rentable :-)
--
///3rL1n____
il faut réaliser un filtre driver ??
"Paul Bacelar" a écrit dans le message
de news: %23$C'est du Kernel, donc pas de .NET, donc pas de C#.
Pourquoi ne pas faire un petit Driver en C de base.
--
Paul Bacelar
MVP VC++
"Vincent" wrote in message
news:%Apres de longues recherches :) , SurpriseRemovalOK est la clé de tout !
quelqu'un sait'il comment passer cette valeur à 1 en C# ?
Merci
Vincent
"Vincent" a écrit dans le message de
news:Par rapport à la doc microsoft ( du lien que tu m'as donné ) tout est
ok :
toutes les étapes renvoient OK.
Si j'ouvre l'explorateur de fichier, le lecteur est toujours présent
même s'il est sans données
(si je clique dessus , message = insérez un disque dans le lecteur F:)
Faut le faire disparaître !!!! :)
Vincent
"Vincent" a écrit dans le message de
news:Merci pour ton aide,
j'ai suivi les directives du lien
http://support.microsoft.com/default.aspx?scid=kb;en-us;165721
j'obtien des résultats. mais pour
DeviceIoControl(hDrive,FSCTL_DISMOUNT_VOLUME,IntPtr.Zero,0,IntPtr.Zero,0,ref
octet_retour,IntPtr.Zero)
Renvoi l'erreur 112 sous 2000
et
sous xp : err 24 , Le programme a émis une commande de longueur
incorrecte
Je sais pas trop quoi faire.
La clé est prète à être éjectée pas l'utilisateur, mais à ce moment
une fenêtre (sous 2000)
indique qu'on a retiré la clé brusquement et il faut cliquer ok pour
continuer !
Le client dit : non j'en veut pas
je suis ds le caca :)
Vincent
"Simon Mourier [SoftFluent]" a écrit
dans le message de news:Malheureusement, la norme USB n'impose pas de numéro de série pour un
périphérique, quel qu'il soit. Etes vous sûr que le disque en
question a un numéro de série?
voir ici:
http://blogs.msdn.com/oldnewthing/archive/2004/11/10/255047.aspx
Simon.
www.softfluent.com
"Vincent" a écrit dans le message de
news:Je découvre ManagementObject,
new ManagementObject("Win32_PhysicalMedia.Tag='" + drive["DeviceID"]
+ "'")["SerialNumber"] semble ne rien retourner ?
Vincent
"Vincent" a écrit dans le message de
news:Je vais voir tout ça, il y en a déjà une bonne partie que j'utilise
: Createfile,deviceiocontrol,closehandle...
je regarde avec beaucoup d'interet ....
Merci
A bientot pour le cpte rendu :)
Vincent
"Simon Mourier [SoftFluent]" a écrit
dans le message de news:arggghhh .... 51 lignes (dans un éditeur avec plus de 80
colonnes)...
bon je n'ai pas le safe, mais il faut juste adapter complètement
http://support.microsoft.com/default.aspx?scid=kb;en-us;165721
faut bosser maintenant :-)
Simon
www.softfluent.com
[DllImport("Kernel32.dll", SetLastError = true)]
static extern IntPtr CreateFile(string lpFileName, int
dwDesiredAccess,
int dwShareMode, IntPtr lpSecurityAttributes, int
dwCreationDisposition, int
dwFlagsAndAttributes, IntPtr hTemplateFile);
[DllImport("Kernel32.dll", SetLastError = true)]
static extern bool DeviceIoControl(IntPtr hDevice, int
dwIoControlCode,
IntPtr lpInBuffer, int nInBufferSize, IntPtr lpOutBuffer, int
nOutBufferSize, out int lpBytesReturned, IntPtr lpOverlapped);
[DllImport("Kernel32.dll", SetLastError = true)]
static extern bool CloseHandle(IntPtr hObject);
const int GENERIC_READ = unchecked((int)0x80000000);
const int FILE_SHARE_READ = 0x00000001;
const int FILE_SHARE_WRITE = 0x00000002;
const int OPEN_EXISTING = 3;
const int IOCTL_STORAGE_EJECT_MEDIA = 0x2D4808;
static bool EjectVolume(string volumeName)
{
IntPtr hFile = CreateFile(@"." + volumeName, GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE, IntPtr.Zero, OPEN_EXISTING, 0,
IntPtr.Zero);
if (hFile == new IntPtr(-1))
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
try
{
int bytesReturned;
if (!DeviceIoControl(hFile, IOCTL_STORAGE_EJECT_MEDIA,
IntPtr.Zero, 0,
IntPtr.Zero, 0, out bytesReturned, IntPtr.Zero))
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
}
finally
{
CloseHandle(hFile);
}
return false;
}
static void EjectAllUsbVolumes()
{
foreach(ManagementObject drive in new
ManagementObjectSearcher("select *
from Win32_DiskDrive where InterfaceType='USB'").Get())
{
foreach(ManagementObject partition in new
ManagementObjectSearcher("ASSOCIATORS OF
{Win32_DiskDrive.DeviceID='" +
drive["DeviceID"] + "'} WHERE AssocClass >>>>>>>>> Win32_DiskDriveToDiskPartition").Get())
{
Console.WriteLine("Partition=" + partition["Name"]);
foreach(ManagementObject disk in new
ManagementObjectSearcher("ASSOCIATORS OF
{Win32_DiskPartition.DeviceID='" +
partition["DeviceID"] + "'} WHERE AssocClass >>>>>>>>> Win32_LogicalDiskToPartition").Get())
{
Console.WriteLine("Disk=" + disk["Name"]);
EjectVolume(disk["Name"].ToString());
}
}
Console.WriteLine("Serial=" + new
ManagementObject("Win32_PhysicalMedia.Tag='" + drive["DeviceID"] +
"'")["SerialNumber"]);
}
}
"Vincent" a écrit dans le message
de news:Même que l'ejection de la clé usb en mode "safe" je suis preneur
Vincent
"Merlin" a écrit dans le message de news:ps : s'il y a 20 lignes je suis preneur quand même
je dirais que même jusqu'à 40 c'est encore assez rentable :-)
--
///3rL1n____
il faut réaliser un filtre driver ??
"Paul Bacelar" <paul.bacelar@PASDESPAMlaposte.net> a écrit dans le message
de news: %23$oiujqSGHA.1160@TK2MSFTNGP09.phx.gbl...
C'est du Kernel, donc pas de .NET, donc pas de C#.
Pourquoi ne pas faire un petit Driver en C de base.
--
Paul Bacelar
MVP VC++
"Vincent" <vincent31spamaoter@wanadoo.fr> wrote in message
news:%23TJ6bolSGHA.5036@TK2MSFTNGP12.phx.gbl...
Apres de longues recherches :) , SurpriseRemovalOK est la clé de tout !
quelqu'un sait'il comment passer cette valeur à 1 en C# ?
Merci
Vincent
"Vincent" <vincent31spamaoter@wanadoo.fr> a écrit dans le message de
news: Ofe7pAhSGHA.4492@TK2MSFTNGP09.phx.gbl...
Par rapport à la doc microsoft ( du lien que tu m'as donné ) tout est
ok :
toutes les étapes renvoient OK.
Si j'ouvre l'explorateur de fichier, le lecteur est toujours présent
même s'il est sans données
(si je clique dessus , message = insérez un disque dans le lecteur F:)
Faut le faire disparaître !!!! :)
Vincent
"Vincent" <vincent31spamaoter@wanadoo.fr> a écrit dans le message de
news: OueVC4eSGHA.1728@TK2MSFTNGP11.phx.gbl...
Merci pour ton aide,
j'ai suivi les directives du lien
http://support.microsoft.com/default.aspx?scid=kb;en-us;165721
j'obtien des résultats. mais pour
DeviceIoControl(hDrive,FSCTL_DISMOUNT_VOLUME,IntPtr.Zero,0,IntPtr.Zero,0,ref
octet_retour,IntPtr.Zero)
Renvoi l'erreur 112 sous 2000
et
sous xp : err 24 , Le programme a émis une commande de longueur
incorrecte
Je sais pas trop quoi faire.
La clé est prète à être éjectée pas l'utilisateur, mais à ce moment
une fenêtre (sous 2000)
indique qu'on a retiré la clé brusquement et il faut cliquer ok pour
continuer !
Le client dit : non j'en veut pas
je suis ds le caca :)
Vincent
"Simon Mourier [SoftFluent]" <simon.mourier@mycompany.com> a écrit
dans le message de news: uYcWAGaSGHA.5728@tk2msftngp13.phx.gbl...
Malheureusement, la norme USB n'impose pas de numéro de série pour un
périphérique, quel qu'il soit. Etes vous sûr que le disque en
question a un numéro de série?
voir ici:
http://blogs.msdn.com/oldnewthing/archive/2004/11/10/255047.aspx
Simon.
www.softfluent.com
"Vincent" <vincent31spamaoter@wanadoo.fr> a écrit dans le message de
news: elzYl0XSGHA.5736@TK2MSFTNGP10.phx.gbl...
Je découvre ManagementObject,
new ManagementObject("Win32_PhysicalMedia.Tag='" + drive["DeviceID"]
+ "'")["SerialNumber"] semble ne rien retourner ?
Vincent
"Vincent" <vincent31spamaoter@wanadoo.fr> a écrit dans le message de
news: eem2XkRSGHA.5552@TK2MSFTNGP14.phx.gbl...
Je vais voir tout ça, il y en a déjà une bonne partie que j'utilise
: Createfile,deviceiocontrol,closehandle...
je regarde avec beaucoup d'interet ....
Merci
A bientot pour le cpte rendu :)
Vincent
"Simon Mourier [SoftFluent]" <simon.mourier@mycompany.com> a écrit
dans le message de news: ucZCTAISGHA.2300@TK2MSFTNGP11.phx.gbl...
arggghhh .... 51 lignes (dans un éditeur avec plus de 80
colonnes)...
bon je n'ai pas le safe, mais il faut juste adapter complètement
http://support.microsoft.com/default.aspx?scid=kb;en-us;165721
faut bosser maintenant :-)
Simon
www.softfluent.com
[DllImport("Kernel32.dll", SetLastError = true)]
static extern IntPtr CreateFile(string lpFileName, int
dwDesiredAccess,
int dwShareMode, IntPtr lpSecurityAttributes, int
dwCreationDisposition, int
dwFlagsAndAttributes, IntPtr hTemplateFile);
[DllImport("Kernel32.dll", SetLastError = true)]
static extern bool DeviceIoControl(IntPtr hDevice, int
dwIoControlCode,
IntPtr lpInBuffer, int nInBufferSize, IntPtr lpOutBuffer, int
nOutBufferSize, out int lpBytesReturned, IntPtr lpOverlapped);
[DllImport("Kernel32.dll", SetLastError = true)]
static extern bool CloseHandle(IntPtr hObject);
const int GENERIC_READ = unchecked((int)0x80000000);
const int FILE_SHARE_READ = 0x00000001;
const int FILE_SHARE_WRITE = 0x00000002;
const int OPEN_EXISTING = 3;
const int IOCTL_STORAGE_EJECT_MEDIA = 0x2D4808;
static bool EjectVolume(string volumeName)
{
IntPtr hFile = CreateFile(@"\." + volumeName, GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE, IntPtr.Zero, OPEN_EXISTING, 0,
IntPtr.Zero);
if (hFile == new IntPtr(-1))
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
try
{
int bytesReturned;
if (!DeviceIoControl(hFile, IOCTL_STORAGE_EJECT_MEDIA,
IntPtr.Zero, 0,
IntPtr.Zero, 0, out bytesReturned, IntPtr.Zero))
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
}
finally
{
CloseHandle(hFile);
}
return false;
}
static void EjectAllUsbVolumes()
{
foreach(ManagementObject drive in new
ManagementObjectSearcher("select *
from Win32_DiskDrive where InterfaceType='USB'").Get())
{
foreach(ManagementObject partition in new
ManagementObjectSearcher("ASSOCIATORS OF
{Win32_DiskDrive.DeviceID='" +
drive["DeviceID"] + "'} WHERE AssocClass >>>>>>>>> Win32_DiskDriveToDiskPartition").Get())
{
Console.WriteLine("Partition=" + partition["Name"]);
foreach(ManagementObject disk in new
ManagementObjectSearcher("ASSOCIATORS OF
{Win32_DiskPartition.DeviceID='" +
partition["DeviceID"] + "'} WHERE AssocClass >>>>>>>>> Win32_LogicalDiskToPartition").Get())
{
Console.WriteLine("Disk=" + disk["Name"]);
EjectVolume(disk["Name"].ToString());
}
}
Console.WriteLine("Serial=" + new
ManagementObject("Win32_PhysicalMedia.Tag='" + drive["DeviceID"] +
"'")["SerialNumber"]);
}
}
"Vincent" <vincent31spamaoter@wanadoo.fr> a écrit dans le message
de news:
u3e7AdFSGHA.4384@tk2msftngp13.phx.gbl...
Même que l'ejection de la clé usb en mode "safe" je suis preneur
Vincent
"Merlin" <Merlin@LesFees.Net> a écrit dans le message de news:
mn.79327d639749c88b.18651@LesFees.Net...
ps : s'il y a 20 lignes je suis preneur quand même
je dirais que même jusqu'à 40 c'est encore assez rentable :-)
--
///\3rL1n____
il faut réaliser un filtre driver ??
"Paul Bacelar" a écrit dans le message
de news: %23$C'est du Kernel, donc pas de .NET, donc pas de C#.
Pourquoi ne pas faire un petit Driver en C de base.
--
Paul Bacelar
MVP VC++
"Vincent" wrote in message
news:%Apres de longues recherches :) , SurpriseRemovalOK est la clé de tout !
quelqu'un sait'il comment passer cette valeur à 1 en C# ?
Merci
Vincent
"Vincent" a écrit dans le message de
news:Par rapport à la doc microsoft ( du lien que tu m'as donné ) tout est
ok :
toutes les étapes renvoient OK.
Si j'ouvre l'explorateur de fichier, le lecteur est toujours présent
même s'il est sans données
(si je clique dessus , message = insérez un disque dans le lecteur F:)
Faut le faire disparaître !!!! :)
Vincent
"Vincent" a écrit dans le message de
news:Merci pour ton aide,
j'ai suivi les directives du lien
http://support.microsoft.com/default.aspx?scid=kb;en-us;165721
j'obtien des résultats. mais pour
DeviceIoControl(hDrive,FSCTL_DISMOUNT_VOLUME,IntPtr.Zero,0,IntPtr.Zero,0,ref
octet_retour,IntPtr.Zero)
Renvoi l'erreur 112 sous 2000
et
sous xp : err 24 , Le programme a émis une commande de longueur
incorrecte
Je sais pas trop quoi faire.
La clé est prète à être éjectée pas l'utilisateur, mais à ce moment
une fenêtre (sous 2000)
indique qu'on a retiré la clé brusquement et il faut cliquer ok pour
continuer !
Le client dit : non j'en veut pas
je suis ds le caca :)
Vincent
"Simon Mourier [SoftFluent]" a écrit
dans le message de news:Malheureusement, la norme USB n'impose pas de numéro de série pour un
périphérique, quel qu'il soit. Etes vous sûr que le disque en
question a un numéro de série?
voir ici:
http://blogs.msdn.com/oldnewthing/archive/2004/11/10/255047.aspx
Simon.
www.softfluent.com
"Vincent" a écrit dans le message de
news:Je découvre ManagementObject,
new ManagementObject("Win32_PhysicalMedia.Tag='" + drive["DeviceID"]
+ "'")["SerialNumber"] semble ne rien retourner ?
Vincent
"Vincent" a écrit dans le message de
news:Je vais voir tout ça, il y en a déjà une bonne partie que j'utilise
: Createfile,deviceiocontrol,closehandle...
je regarde avec beaucoup d'interet ....
Merci
A bientot pour le cpte rendu :)
Vincent
"Simon Mourier [SoftFluent]" a écrit
dans le message de news:arggghhh .... 51 lignes (dans un éditeur avec plus de 80
colonnes)...
bon je n'ai pas le safe, mais il faut juste adapter complètement
http://support.microsoft.com/default.aspx?scid=kb;en-us;165721
faut bosser maintenant :-)
Simon
www.softfluent.com
[DllImport("Kernel32.dll", SetLastError = true)]
static extern IntPtr CreateFile(string lpFileName, int
dwDesiredAccess,
int dwShareMode, IntPtr lpSecurityAttributes, int
dwCreationDisposition, int
dwFlagsAndAttributes, IntPtr hTemplateFile);
[DllImport("Kernel32.dll", SetLastError = true)]
static extern bool DeviceIoControl(IntPtr hDevice, int
dwIoControlCode,
IntPtr lpInBuffer, int nInBufferSize, IntPtr lpOutBuffer, int
nOutBufferSize, out int lpBytesReturned, IntPtr lpOverlapped);
[DllImport("Kernel32.dll", SetLastError = true)]
static extern bool CloseHandle(IntPtr hObject);
const int GENERIC_READ = unchecked((int)0x80000000);
const int FILE_SHARE_READ = 0x00000001;
const int FILE_SHARE_WRITE = 0x00000002;
const int OPEN_EXISTING = 3;
const int IOCTL_STORAGE_EJECT_MEDIA = 0x2D4808;
static bool EjectVolume(string volumeName)
{
IntPtr hFile = CreateFile(@"." + volumeName, GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE, IntPtr.Zero, OPEN_EXISTING, 0,
IntPtr.Zero);
if (hFile == new IntPtr(-1))
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
try
{
int bytesReturned;
if (!DeviceIoControl(hFile, IOCTL_STORAGE_EJECT_MEDIA,
IntPtr.Zero, 0,
IntPtr.Zero, 0, out bytesReturned, IntPtr.Zero))
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
}
finally
{
CloseHandle(hFile);
}
return false;
}
static void EjectAllUsbVolumes()
{
foreach(ManagementObject drive in new
ManagementObjectSearcher("select *
from Win32_DiskDrive where InterfaceType='USB'").Get())
{
foreach(ManagementObject partition in new
ManagementObjectSearcher("ASSOCIATORS OF
{Win32_DiskDrive.DeviceID='" +
drive["DeviceID"] + "'} WHERE AssocClass >>>>>>>>> Win32_DiskDriveToDiskPartition").Get())
{
Console.WriteLine("Partition=" + partition["Name"]);
foreach(ManagementObject disk in new
ManagementObjectSearcher("ASSOCIATORS OF
{Win32_DiskPartition.DeviceID='" +
partition["DeviceID"] + "'} WHERE AssocClass >>>>>>>>> Win32_LogicalDiskToPartition").Get())
{
Console.WriteLine("Disk=" + disk["Name"]);
EjectVolume(disk["Name"].ToString());
}
}
Console.WriteLine("Serial=" + new
ManagementObject("Win32_PhysicalMedia.Tag='" + drive["DeviceID"] +
"'")["SerialNumber"]);
}
}
"Vincent" a écrit dans le message
de news:Même que l'ejection de la clé usb en mode "safe" je suis preneur
Vincent
"Merlin" a écrit dans le message de news:ps : s'il y a 20 lignes je suis preneur quand même
je dirais que même jusqu'à 40 c'est encore assez rentable :-)
--
///3rL1n____
Avez-vous verrouillé le volume avant de le démonter avec
"FSCTL_DISMOUNT_VOLUME".
Faites vos programmes de preuve de concept en C pour ne pas avoir de
problème de marshalling, puis, quand tous les menu problèmes sons résolu,
passez à C#.
Si vous avez en tête de faire une solution pérenne et fiable, un filter
driver sera une bonne solution.
--
Paul Bacelar
MVP VC++
"Vincent" wrote in message
news:il faut réaliser un filtre driver ??
"Paul Bacelar" a écrit dans le
message de news: %23$C'est du Kernel, donc pas de .NET, donc pas de C#.
Pourquoi ne pas faire un petit Driver en C de base.
--
Paul Bacelar
MVP VC++
"Vincent" wrote in message
news:%Apres de longues recherches :) , SurpriseRemovalOK est la clé de tout !
quelqu'un sait'il comment passer cette valeur à 1 en C# ?
Merci
Vincent
"Vincent" a écrit dans le message de
news:Par rapport à la doc microsoft ( du lien que tu m'as donné ) tout est
ok :
toutes les étapes renvoient OK.
Si j'ouvre l'explorateur de fichier, le lecteur est toujours présent
même s'il est sans données
(si je clique dessus , message = insérez un disque dans le lecteur F:)
Faut le faire disparaître !!!! :)
Vincent
"Vincent" a écrit dans le message de
news:Merci pour ton aide,
j'ai suivi les directives du lien
http://support.microsoft.com/default.aspx?scid=kb;en-us;165721
j'obtien des résultats. mais pour
DeviceIoControl(hDrive,FSCTL_DISMOUNT_VOLUME,IntPtr.Zero,0,IntPtr.Zero,0,ref
octet_retour,IntPtr.Zero)
Renvoi l'erreur 112 sous 2000
et
sous xp : err 24 , Le programme a émis une commande de longueur
incorrecte
Je sais pas trop quoi faire.
La clé est prète à être éjectée pas l'utilisateur, mais à ce moment
une fenêtre (sous 2000)
indique qu'on a retiré la clé brusquement et il faut cliquer ok pour
continuer !
Le client dit : non j'en veut pas
je suis ds le caca :)
Vincent
"Simon Mourier [SoftFluent]" a écrit
dans le message de news:Malheureusement, la norme USB n'impose pas de numéro de série pour
un périphérique, quel qu'il soit. Etes vous sûr que le disque en
question a un numéro de série?
voir ici:
http://blogs.msdn.com/oldnewthing/archive/2004/11/10/255047.aspx
Simon.
www.softfluent.com
"Vincent" a écrit dans le message de
news:Je découvre ManagementObject,
new ManagementObject("Win32_PhysicalMedia.Tag='" +
drive["DeviceID"] + "'")["SerialNumber"] semble ne rien retourner
?
Vincent
"Vincent" a écrit dans le message
de news:Je vais voir tout ça, il y en a déjà une bonne partie que
j'utilise : Createfile,deviceiocontrol,closehandle...
je regarde avec beaucoup d'interet ....
Merci
A bientot pour le cpte rendu :)
Vincent
"Simon Mourier [SoftFluent]" a écrit
dans le message de news:arggghhh .... 51 lignes (dans un éditeur avec plus de 80
colonnes)...
bon je n'ai pas le safe, mais il faut juste adapter complètement
http://support.microsoft.com/default.aspx?scid=kb;en-us;165721
faut bosser maintenant :-)
Simon
www.softfluent.com
[DllImport("Kernel32.dll", SetLastError = true)]
static extern IntPtr CreateFile(string lpFileName, int
dwDesiredAccess,
int dwShareMode, IntPtr lpSecurityAttributes, int
dwCreationDisposition, int
dwFlagsAndAttributes, IntPtr hTemplateFile);
[DllImport("Kernel32.dll", SetLastError = true)]
static extern bool DeviceIoControl(IntPtr hDevice, int
dwIoControlCode,
IntPtr lpInBuffer, int nInBufferSize, IntPtr lpOutBuffer, int
nOutBufferSize, out int lpBytesReturned, IntPtr lpOverlapped);
[DllImport("Kernel32.dll", SetLastError = true)]
static extern bool CloseHandle(IntPtr hObject);
const int GENERIC_READ = unchecked((int)0x80000000);
const int FILE_SHARE_READ = 0x00000001;
const int FILE_SHARE_WRITE = 0x00000002;
const int OPEN_EXISTING = 3;
const int IOCTL_STORAGE_EJECT_MEDIA = 0x2D4808;
static bool EjectVolume(string volumeName)
{
IntPtr hFile = CreateFile(@"." + volumeName, GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE, IntPtr.Zero, OPEN_EXISTING,
0,
IntPtr.Zero);
if (hFile == new IntPtr(-1))
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
try
{
int bytesReturned;
if (!DeviceIoControl(hFile, IOCTL_STORAGE_EJECT_MEDIA,
IntPtr.Zero, 0,
IntPtr.Zero, 0, out bytesReturned, IntPtr.Zero))
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
}
finally
{
CloseHandle(hFile);
}
return false;
}
static void EjectAllUsbVolumes()
{
foreach(ManagementObject drive in new
ManagementObjectSearcher("select *
from Win32_DiskDrive where InterfaceType='USB'").Get())
{
foreach(ManagementObject partition in new
ManagementObjectSearcher("ASSOCIATORS OF
{Win32_DiskDrive.DeviceID='" +
drive["DeviceID"] + "'} WHERE AssocClass >>>>>>>>>> Win32_DiskDriveToDiskPartition").Get())
{
Console.WriteLine("Partition=" + partition["Name"]);
foreach(ManagementObject disk in new
ManagementObjectSearcher("ASSOCIATORS OF
{Win32_DiskPartition.DeviceID='" +
partition["DeviceID"] + "'} WHERE AssocClass >>>>>>>>>> Win32_LogicalDiskToPartition").Get())
{
Console.WriteLine("Disk=" + disk["Name"]);
EjectVolume(disk["Name"].ToString());
}
}
Console.WriteLine("Serial=" + new
ManagementObject("Win32_PhysicalMedia.Tag='" + drive["DeviceID"]
+
"'")["SerialNumber"]);
}
}
"Vincent" a écrit dans le message
de news:Même que l'ejection de la clé usb en mode "safe" je suis preneur
Vincent
"Merlin" a écrit dans le message de news:ps : s'il y a 20 lignes je suis preneur quand même
je dirais que même jusqu'à 40 c'est encore assez rentable :-)
--
///3rL1n____
Avez-vous verrouillé le volume avant de le démonter avec
"FSCTL_DISMOUNT_VOLUME".
Faites vos programmes de preuve de concept en C pour ne pas avoir de
problème de marshalling, puis, quand tous les menu problèmes sons résolu,
passez à C#.
Si vous avez en tête de faire une solution pérenne et fiable, un filter
driver sera une bonne solution.
--
Paul Bacelar
MVP VC++
"Vincent" <vincent31spamaoter@wanadoo.fr> wrote in message
news:OONRLJtSGHA.4440@TK2MSFTNGP11.phx.gbl...
il faut réaliser un filtre driver ??
"Paul Bacelar" <paul.bacelar@PASDESPAMlaposte.net> a écrit dans le
message de news: %23$oiujqSGHA.1160@TK2MSFTNGP09.phx.gbl...
C'est du Kernel, donc pas de .NET, donc pas de C#.
Pourquoi ne pas faire un petit Driver en C de base.
--
Paul Bacelar
MVP VC++
"Vincent" <vincent31spamaoter@wanadoo.fr> wrote in message
news:%23TJ6bolSGHA.5036@TK2MSFTNGP12.phx.gbl...
Apres de longues recherches :) , SurpriseRemovalOK est la clé de tout !
quelqu'un sait'il comment passer cette valeur à 1 en C# ?
Merci
Vincent
"Vincent" <vincent31spamaoter@wanadoo.fr> a écrit dans le message de
news: Ofe7pAhSGHA.4492@TK2MSFTNGP09.phx.gbl...
Par rapport à la doc microsoft ( du lien que tu m'as donné ) tout est
ok :
toutes les étapes renvoient OK.
Si j'ouvre l'explorateur de fichier, le lecteur est toujours présent
même s'il est sans données
(si je clique dessus , message = insérez un disque dans le lecteur F:)
Faut le faire disparaître !!!! :)
Vincent
"Vincent" <vincent31spamaoter@wanadoo.fr> a écrit dans le message de
news: OueVC4eSGHA.1728@TK2MSFTNGP11.phx.gbl...
Merci pour ton aide,
j'ai suivi les directives du lien
http://support.microsoft.com/default.aspx?scid=kb;en-us;165721
j'obtien des résultats. mais pour
DeviceIoControl(hDrive,FSCTL_DISMOUNT_VOLUME,IntPtr.Zero,0,IntPtr.Zero,0,ref
octet_retour,IntPtr.Zero)
Renvoi l'erreur 112 sous 2000
et
sous xp : err 24 , Le programme a émis une commande de longueur
incorrecte
Je sais pas trop quoi faire.
La clé est prète à être éjectée pas l'utilisateur, mais à ce moment
une fenêtre (sous 2000)
indique qu'on a retiré la clé brusquement et il faut cliquer ok pour
continuer !
Le client dit : non j'en veut pas
je suis ds le caca :)
Vincent
"Simon Mourier [SoftFluent]" <simon.mourier@mycompany.com> a écrit
dans le message de news: uYcWAGaSGHA.5728@tk2msftngp13.phx.gbl...
Malheureusement, la norme USB n'impose pas de numéro de série pour
un périphérique, quel qu'il soit. Etes vous sûr que le disque en
question a un numéro de série?
voir ici:
http://blogs.msdn.com/oldnewthing/archive/2004/11/10/255047.aspx
Simon.
www.softfluent.com
"Vincent" <vincent31spamaoter@wanadoo.fr> a écrit dans le message de
news: elzYl0XSGHA.5736@TK2MSFTNGP10.phx.gbl...
Je découvre ManagementObject,
new ManagementObject("Win32_PhysicalMedia.Tag='" +
drive["DeviceID"] + "'")["SerialNumber"] semble ne rien retourner
?
Vincent
"Vincent" <vincent31spamaoter@wanadoo.fr> a écrit dans le message
de news: eem2XkRSGHA.5552@TK2MSFTNGP14.phx.gbl...
Je vais voir tout ça, il y en a déjà une bonne partie que
j'utilise : Createfile,deviceiocontrol,closehandle...
je regarde avec beaucoup d'interet ....
Merci
A bientot pour le cpte rendu :)
Vincent
"Simon Mourier [SoftFluent]" <simon.mourier@mycompany.com> a écrit
dans le message de news: ucZCTAISGHA.2300@TK2MSFTNGP11.phx.gbl...
arggghhh .... 51 lignes (dans un éditeur avec plus de 80
colonnes)...
bon je n'ai pas le safe, mais il faut juste adapter complètement
http://support.microsoft.com/default.aspx?scid=kb;en-us;165721
faut bosser maintenant :-)
Simon
www.softfluent.com
[DllImport("Kernel32.dll", SetLastError = true)]
static extern IntPtr CreateFile(string lpFileName, int
dwDesiredAccess,
int dwShareMode, IntPtr lpSecurityAttributes, int
dwCreationDisposition, int
dwFlagsAndAttributes, IntPtr hTemplateFile);
[DllImport("Kernel32.dll", SetLastError = true)]
static extern bool DeviceIoControl(IntPtr hDevice, int
dwIoControlCode,
IntPtr lpInBuffer, int nInBufferSize, IntPtr lpOutBuffer, int
nOutBufferSize, out int lpBytesReturned, IntPtr lpOverlapped);
[DllImport("Kernel32.dll", SetLastError = true)]
static extern bool CloseHandle(IntPtr hObject);
const int GENERIC_READ = unchecked((int)0x80000000);
const int FILE_SHARE_READ = 0x00000001;
const int FILE_SHARE_WRITE = 0x00000002;
const int OPEN_EXISTING = 3;
const int IOCTL_STORAGE_EJECT_MEDIA = 0x2D4808;
static bool EjectVolume(string volumeName)
{
IntPtr hFile = CreateFile(@"\." + volumeName, GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE, IntPtr.Zero, OPEN_EXISTING,
0,
IntPtr.Zero);
if (hFile == new IntPtr(-1))
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
try
{
int bytesReturned;
if (!DeviceIoControl(hFile, IOCTL_STORAGE_EJECT_MEDIA,
IntPtr.Zero, 0,
IntPtr.Zero, 0, out bytesReturned, IntPtr.Zero))
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
}
finally
{
CloseHandle(hFile);
}
return false;
}
static void EjectAllUsbVolumes()
{
foreach(ManagementObject drive in new
ManagementObjectSearcher("select *
from Win32_DiskDrive where InterfaceType='USB'").Get())
{
foreach(ManagementObject partition in new
ManagementObjectSearcher("ASSOCIATORS OF
{Win32_DiskDrive.DeviceID='" +
drive["DeviceID"] + "'} WHERE AssocClass >>>>>>>>>> Win32_DiskDriveToDiskPartition").Get())
{
Console.WriteLine("Partition=" + partition["Name"]);
foreach(ManagementObject disk in new
ManagementObjectSearcher("ASSOCIATORS OF
{Win32_DiskPartition.DeviceID='" +
partition["DeviceID"] + "'} WHERE AssocClass >>>>>>>>>> Win32_LogicalDiskToPartition").Get())
{
Console.WriteLine("Disk=" + disk["Name"]);
EjectVolume(disk["Name"].ToString());
}
}
Console.WriteLine("Serial=" + new
ManagementObject("Win32_PhysicalMedia.Tag='" + drive["DeviceID"]
+
"'")["SerialNumber"]);
}
}
"Vincent" <vincent31spamaoter@wanadoo.fr> a écrit dans le message
de news:
u3e7AdFSGHA.4384@tk2msftngp13.phx.gbl...
Même que l'ejection de la clé usb en mode "safe" je suis preneur
Vincent
"Merlin" <Merlin@LesFees.Net> a écrit dans le message de news:
mn.79327d639749c88b.18651@LesFees.Net...
ps : s'il y a 20 lignes je suis preneur quand même
je dirais que même jusqu'à 40 c'est encore assez rentable :-)
--
///\3rL1n____
Avez-vous verrouillé le volume avant de le démonter avec
"FSCTL_DISMOUNT_VOLUME".
Faites vos programmes de preuve de concept en C pour ne pas avoir de
problème de marshalling, puis, quand tous les menu problèmes sons résolu,
passez à C#.
Si vous avez en tête de faire une solution pérenne et fiable, un filter
driver sera une bonne solution.
--
Paul Bacelar
MVP VC++
"Vincent" wrote in message
news:il faut réaliser un filtre driver ??
"Paul Bacelar" a écrit dans le
message de news: %23$C'est du Kernel, donc pas de .NET, donc pas de C#.
Pourquoi ne pas faire un petit Driver en C de base.
--
Paul Bacelar
MVP VC++
"Vincent" wrote in message
news:%Apres de longues recherches :) , SurpriseRemovalOK est la clé de tout !
quelqu'un sait'il comment passer cette valeur à 1 en C# ?
Merci
Vincent
"Vincent" a écrit dans le message de
news:Par rapport à la doc microsoft ( du lien que tu m'as donné ) tout est
ok :
toutes les étapes renvoient OK.
Si j'ouvre l'explorateur de fichier, le lecteur est toujours présent
même s'il est sans données
(si je clique dessus , message = insérez un disque dans le lecteur F:)
Faut le faire disparaître !!!! :)
Vincent
"Vincent" a écrit dans le message de
news:Merci pour ton aide,
j'ai suivi les directives du lien
http://support.microsoft.com/default.aspx?scid=kb;en-us;165721
j'obtien des résultats. mais pour
DeviceIoControl(hDrive,FSCTL_DISMOUNT_VOLUME,IntPtr.Zero,0,IntPtr.Zero,0,ref
octet_retour,IntPtr.Zero)
Renvoi l'erreur 112 sous 2000
et
sous xp : err 24 , Le programme a émis une commande de longueur
incorrecte
Je sais pas trop quoi faire.
La clé est prète à être éjectée pas l'utilisateur, mais à ce moment
une fenêtre (sous 2000)
indique qu'on a retiré la clé brusquement et il faut cliquer ok pour
continuer !
Le client dit : non j'en veut pas
je suis ds le caca :)
Vincent
"Simon Mourier [SoftFluent]" a écrit
dans le message de news:Malheureusement, la norme USB n'impose pas de numéro de série pour
un périphérique, quel qu'il soit. Etes vous sûr que le disque en
question a un numéro de série?
voir ici:
http://blogs.msdn.com/oldnewthing/archive/2004/11/10/255047.aspx
Simon.
www.softfluent.com
"Vincent" a écrit dans le message de
news:Je découvre ManagementObject,
new ManagementObject("Win32_PhysicalMedia.Tag='" +
drive["DeviceID"] + "'")["SerialNumber"] semble ne rien retourner
?
Vincent
"Vincent" a écrit dans le message
de news:Je vais voir tout ça, il y en a déjà une bonne partie que
j'utilise : Createfile,deviceiocontrol,closehandle...
je regarde avec beaucoup d'interet ....
Merci
A bientot pour le cpte rendu :)
Vincent
"Simon Mourier [SoftFluent]" a écrit
dans le message de news:arggghhh .... 51 lignes (dans un éditeur avec plus de 80
colonnes)...
bon je n'ai pas le safe, mais il faut juste adapter complètement
http://support.microsoft.com/default.aspx?scid=kb;en-us;165721
faut bosser maintenant :-)
Simon
www.softfluent.com
[DllImport("Kernel32.dll", SetLastError = true)]
static extern IntPtr CreateFile(string lpFileName, int
dwDesiredAccess,
int dwShareMode, IntPtr lpSecurityAttributes, int
dwCreationDisposition, int
dwFlagsAndAttributes, IntPtr hTemplateFile);
[DllImport("Kernel32.dll", SetLastError = true)]
static extern bool DeviceIoControl(IntPtr hDevice, int
dwIoControlCode,
IntPtr lpInBuffer, int nInBufferSize, IntPtr lpOutBuffer, int
nOutBufferSize, out int lpBytesReturned, IntPtr lpOverlapped);
[DllImport("Kernel32.dll", SetLastError = true)]
static extern bool CloseHandle(IntPtr hObject);
const int GENERIC_READ = unchecked((int)0x80000000);
const int FILE_SHARE_READ = 0x00000001;
const int FILE_SHARE_WRITE = 0x00000002;
const int OPEN_EXISTING = 3;
const int IOCTL_STORAGE_EJECT_MEDIA = 0x2D4808;
static bool EjectVolume(string volumeName)
{
IntPtr hFile = CreateFile(@"." + volumeName, GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE, IntPtr.Zero, OPEN_EXISTING,
0,
IntPtr.Zero);
if (hFile == new IntPtr(-1))
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
try
{
int bytesReturned;
if (!DeviceIoControl(hFile, IOCTL_STORAGE_EJECT_MEDIA,
IntPtr.Zero, 0,
IntPtr.Zero, 0, out bytesReturned, IntPtr.Zero))
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
}
finally
{
CloseHandle(hFile);
}
return false;
}
static void EjectAllUsbVolumes()
{
foreach(ManagementObject drive in new
ManagementObjectSearcher("select *
from Win32_DiskDrive where InterfaceType='USB'").Get())
{
foreach(ManagementObject partition in new
ManagementObjectSearcher("ASSOCIATORS OF
{Win32_DiskDrive.DeviceID='" +
drive["DeviceID"] + "'} WHERE AssocClass >>>>>>>>>> Win32_DiskDriveToDiskPartition").Get())
{
Console.WriteLine("Partition=" + partition["Name"]);
foreach(ManagementObject disk in new
ManagementObjectSearcher("ASSOCIATORS OF
{Win32_DiskPartition.DeviceID='" +
partition["DeviceID"] + "'} WHERE AssocClass >>>>>>>>>> Win32_LogicalDiskToPartition").Get())
{
Console.WriteLine("Disk=" + disk["Name"]);
EjectVolume(disk["Name"].ToString());
}
}
Console.WriteLine("Serial=" + new
ManagementObject("Win32_PhysicalMedia.Tag='" + drive["DeviceID"]
+
"'")["SerialNumber"]);
}
}
"Vincent" a écrit dans le message
de news:Même que l'ejection de la clé usb en mode "safe" je suis preneur
Vincent
"Merlin" a écrit dans le message de news:ps : s'il y a 20 lignes je suis preneur quand même
je dirais que même jusqu'à 40 c'est encore assez rentable :-)
--
///3rL1n____
Dans l'ordre je fais :
CreateFile (retourne handle)
FlushFileBuffers
FSCTL_LOCK_VOLUME (retourne ok)
FSCTL_DISMOUNT_VOLUME(retourne ok)
IOCTL_STORAGE_MEDIA_REMOVAL(retourne ok)
IOCTL_STORAGE_EJECT_MEDIA(retourne ok)
Closehandle(retourne ok)
Mais, d'apres les infos que j'ai trouvé, le problème c'est windows 2000
qui ouvre toujours une fenêtre pour indiquer
qu'un périphérique usb à été déconnecté sauvagement :) , sous windows XP à
part un petit "ding" c'est pas génant.
Pour windows 2000 il faut, semble t'il, à l'installation du périphérique
usb, indiquer que celui_ci peut être retiré sans
prévenir avec SurpriseRemovalOK=vrai.
Il faut pour cela faire un driver filtrer ..... ( c'est là que ça se
gate!!!!!!)
Je sais pas faire, je désire utiliser le driver principal proposé par
windows 2000 ....
une idée ?
Quelqu'un l'a t'il déjà fait ? des conseils ?
Cà semble plus simple de passer sous XP :)
Y a forcement une solution simple ????
Merci
Vincent
"Paul Bacelar" a écrit dans le message
de news: e%238v$Avez-vous verrouillé le volume avant de le démonter avec
"FSCTL_DISMOUNT_VOLUME".
Faites vos programmes de preuve de concept en C pour ne pas avoir de
problème de marshalling, puis, quand tous les menu problèmes sons résolu,
passez à C#.
Si vous avez en tête de faire une solution pérenne et fiable, un filter
driver sera une bonne solution.
--
Paul Bacelar
MVP VC++
"Vincent" wrote in message
news:il faut réaliser un filtre driver ??
"Paul Bacelar" a écrit dans le
message de news: %23$C'est du Kernel, donc pas de .NET, donc pas de C#.
Pourquoi ne pas faire un petit Driver en C de base.
--
Paul Bacelar
MVP VC++
"Vincent" wrote in message
news:%Apres de longues recherches :) , SurpriseRemovalOK est la clé de tout
!
quelqu'un sait'il comment passer cette valeur à 1 en C# ?
Merci
Vincent
"Vincent" a écrit dans le message de
news:Par rapport à la doc microsoft ( du lien que tu m'as donné ) tout est
ok :
toutes les étapes renvoient OK.
Si j'ouvre l'explorateur de fichier, le lecteur est toujours présent
même s'il est sans données
(si je clique dessus , message = insérez un disque dans le lecteur
F:)
Faut le faire disparaître !!!! :)
Vincent
"Vincent" a écrit dans le message de
news:Merci pour ton aide,
j'ai suivi les directives du lien
http://support.microsoft.com/default.aspx?scid=kb;en-us;165721
j'obtien des résultats. mais pour
DeviceIoControl(hDrive,FSCTL_DISMOUNT_VOLUME,IntPtr.Zero,0,IntPtr.Zero,0,ref
octet_retour,IntPtr.Zero)
Renvoi l'erreur 112 sous 2000
et
sous xp : err 24 , Le programme a émis une commande de longueur
incorrecte
Je sais pas trop quoi faire.
La clé est prète à être éjectée pas l'utilisateur, mais à ce moment
une fenêtre (sous 2000)
indique qu'on a retiré la clé brusquement et il faut cliquer ok pour
continuer !
Le client dit : non j'en veut pas
je suis ds le caca :)
Vincent
"Simon Mourier [SoftFluent]" a écrit
dans le message de news:Malheureusement, la norme USB n'impose pas de numéro de série pour
un périphérique, quel qu'il soit. Etes vous sûr que le disque en
question a un numéro de série?
voir ici:
http://blogs.msdn.com/oldnewthing/archive/2004/11/10/255047.aspx
Simon.
www.softfluent.com
"Vincent" a écrit dans le message
de news:Je découvre ManagementObject,
new ManagementObject("Win32_PhysicalMedia.Tag='" +
drive["DeviceID"] + "'")["SerialNumber"] semble ne rien retourner
?
Vincent
"Vincent" a écrit dans le message
de news:Je vais voir tout ça, il y en a déjà une bonne partie que
j'utilise : Createfile,deviceiocontrol,closehandle...
je regarde avec beaucoup d'interet ....
Merci
A bientot pour le cpte rendu :)
Vincent
"Simon Mourier [SoftFluent]" a
écrit dans le message de news:arggghhh .... 51 lignes (dans un éditeur avec plus de 80
colonnes)...
bon je n'ai pas le safe, mais il faut juste adapter complètement
http://support.microsoft.com/default.aspx?scid=kb;en-us;165721
faut bosser maintenant :-)
Simon
www.softfluent.com
[DllImport("Kernel32.dll", SetLastError = true)]
static extern IntPtr CreateFile(string lpFileName, int
dwDesiredAccess,
int dwShareMode, IntPtr lpSecurityAttributes, int
dwCreationDisposition, int
dwFlagsAndAttributes, IntPtr hTemplateFile);
[DllImport("Kernel32.dll", SetLastError = true)]
static extern bool DeviceIoControl(IntPtr hDevice, int
dwIoControlCode,
IntPtr lpInBuffer, int nInBufferSize, IntPtr lpOutBuffer, int
nOutBufferSize, out int lpBytesReturned, IntPtr lpOverlapped);
[DllImport("Kernel32.dll", SetLastError = true)]
static extern bool CloseHandle(IntPtr hObject);
const int GENERIC_READ = unchecked((int)0x80000000);
const int FILE_SHARE_READ = 0x00000001;
const int FILE_SHARE_WRITE = 0x00000002;
const int OPEN_EXISTING = 3;
const int IOCTL_STORAGE_EJECT_MEDIA = 0x2D4808;
static bool EjectVolume(string volumeName)
{
IntPtr hFile = CreateFile(@"." + volumeName, GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE, IntPtr.Zero, OPEN_EXISTING,
0,
IntPtr.Zero);
if (hFile == new IntPtr(-1))
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
try
{
int bytesReturned;
if (!DeviceIoControl(hFile, IOCTL_STORAGE_EJECT_MEDIA,
IntPtr.Zero, 0,
IntPtr.Zero, 0, out bytesReturned, IntPtr.Zero))
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
}
finally
{
CloseHandle(hFile);
}
return false;
}
static void EjectAllUsbVolumes()
{
foreach(ManagementObject drive in new
ManagementObjectSearcher("select *
from Win32_DiskDrive where InterfaceType='USB'").Get())
{
foreach(ManagementObject partition in new
ManagementObjectSearcher("ASSOCIATORS OF
{Win32_DiskDrive.DeviceID='" +
drive["DeviceID"] + "'} WHERE AssocClass >>>>>>>>>>> Win32_DiskDriveToDiskPartition").Get())
{
Console.WriteLine("Partition=" + partition["Name"]);
foreach(ManagementObject disk in new
ManagementObjectSearcher("ASSOCIATORS OF
{Win32_DiskPartition.DeviceID='" +
partition["DeviceID"] + "'} WHERE AssocClass >>>>>>>>>>> Win32_LogicalDiskToPartition").Get())
{
Console.WriteLine("Disk=" + disk["Name"]);
EjectVolume(disk["Name"].ToString());
}
}
Console.WriteLine("Serial=" + new
ManagementObject("Win32_PhysicalMedia.Tag='" + drive["DeviceID"]
+
"'")["SerialNumber"]);
}
}
"Vincent" a écrit dans le
message de news:Même que l'ejection de la clé usb en mode "safe" je suis
preneur
Vincent
"Merlin" a écrit dans le message de news:ps : s'il y a 20 lignes je suis preneur quand même
je dirais que même jusqu'à 40 c'est encore assez rentable :-)
--
///3rL1n____
Dans l'ordre je fais :
CreateFile (retourne handle)
FlushFileBuffers
FSCTL_LOCK_VOLUME (retourne ok)
FSCTL_DISMOUNT_VOLUME(retourne ok)
IOCTL_STORAGE_MEDIA_REMOVAL(retourne ok)
IOCTL_STORAGE_EJECT_MEDIA(retourne ok)
Closehandle(retourne ok)
Mais, d'apres les infos que j'ai trouvé, le problème c'est windows 2000
qui ouvre toujours une fenêtre pour indiquer
qu'un périphérique usb à été déconnecté sauvagement :) , sous windows XP à
part un petit "ding" c'est pas génant.
Pour windows 2000 il faut, semble t'il, à l'installation du périphérique
usb, indiquer que celui_ci peut être retiré sans
prévenir avec SurpriseRemovalOK=vrai.
Il faut pour cela faire un driver filtrer ..... ( c'est là que ça se
gate!!!!!!)
Je sais pas faire, je désire utiliser le driver principal proposé par
windows 2000 ....
une idée ?
Quelqu'un l'a t'il déjà fait ? des conseils ?
Cà semble plus simple de passer sous XP :)
Y a forcement une solution simple ????
Merci
Vincent
"Paul Bacelar" <paul.bacelar@PASDESPAMlaposte.net> a écrit dans le message
de news: e%238v$9tSGHA.1608@TK2MSFTNGP09.phx.gbl...
Avez-vous verrouillé le volume avant de le démonter avec
"FSCTL_DISMOUNT_VOLUME".
Faites vos programmes de preuve de concept en C pour ne pas avoir de
problème de marshalling, puis, quand tous les menu problèmes sons résolu,
passez à C#.
Si vous avez en tête de faire une solution pérenne et fiable, un filter
driver sera une bonne solution.
--
Paul Bacelar
MVP VC++
"Vincent" <vincent31spamaoter@wanadoo.fr> wrote in message
news:OONRLJtSGHA.4440@TK2MSFTNGP11.phx.gbl...
il faut réaliser un filtre driver ??
"Paul Bacelar" <paul.bacelar@PASDESPAMlaposte.net> a écrit dans le
message de news: %23$oiujqSGHA.1160@TK2MSFTNGP09.phx.gbl...
C'est du Kernel, donc pas de .NET, donc pas de C#.
Pourquoi ne pas faire un petit Driver en C de base.
--
Paul Bacelar
MVP VC++
"Vincent" <vincent31spamaoter@wanadoo.fr> wrote in message
news:%23TJ6bolSGHA.5036@TK2MSFTNGP12.phx.gbl...
Apres de longues recherches :) , SurpriseRemovalOK est la clé de tout
!
quelqu'un sait'il comment passer cette valeur à 1 en C# ?
Merci
Vincent
"Vincent" <vincent31spamaoter@wanadoo.fr> a écrit dans le message de
news: Ofe7pAhSGHA.4492@TK2MSFTNGP09.phx.gbl...
Par rapport à la doc microsoft ( du lien que tu m'as donné ) tout est
ok :
toutes les étapes renvoient OK.
Si j'ouvre l'explorateur de fichier, le lecteur est toujours présent
même s'il est sans données
(si je clique dessus , message = insérez un disque dans le lecteur
F:)
Faut le faire disparaître !!!! :)
Vincent
"Vincent" <vincent31spamaoter@wanadoo.fr> a écrit dans le message de
news: OueVC4eSGHA.1728@TK2MSFTNGP11.phx.gbl...
Merci pour ton aide,
j'ai suivi les directives du lien
http://support.microsoft.com/default.aspx?scid=kb;en-us;165721
j'obtien des résultats. mais pour
DeviceIoControl(hDrive,FSCTL_DISMOUNT_VOLUME,IntPtr.Zero,0,IntPtr.Zero,0,ref
octet_retour,IntPtr.Zero)
Renvoi l'erreur 112 sous 2000
et
sous xp : err 24 , Le programme a émis une commande de longueur
incorrecte
Je sais pas trop quoi faire.
La clé est prète à être éjectée pas l'utilisateur, mais à ce moment
une fenêtre (sous 2000)
indique qu'on a retiré la clé brusquement et il faut cliquer ok pour
continuer !
Le client dit : non j'en veut pas
je suis ds le caca :)
Vincent
"Simon Mourier [SoftFluent]" <simon.mourier@mycompany.com> a écrit
dans le message de news: uYcWAGaSGHA.5728@tk2msftngp13.phx.gbl...
Malheureusement, la norme USB n'impose pas de numéro de série pour
un périphérique, quel qu'il soit. Etes vous sûr que le disque en
question a un numéro de série?
voir ici:
http://blogs.msdn.com/oldnewthing/archive/2004/11/10/255047.aspx
Simon.
www.softfluent.com
"Vincent" <vincent31spamaoter@wanadoo.fr> a écrit dans le message
de news: elzYl0XSGHA.5736@TK2MSFTNGP10.phx.gbl...
Je découvre ManagementObject,
new ManagementObject("Win32_PhysicalMedia.Tag='" +
drive["DeviceID"] + "'")["SerialNumber"] semble ne rien retourner
?
Vincent
"Vincent" <vincent31spamaoter@wanadoo.fr> a écrit dans le message
de news: eem2XkRSGHA.5552@TK2MSFTNGP14.phx.gbl...
Je vais voir tout ça, il y en a déjà une bonne partie que
j'utilise : Createfile,deviceiocontrol,closehandle...
je regarde avec beaucoup d'interet ....
Merci
A bientot pour le cpte rendu :)
Vincent
"Simon Mourier [SoftFluent]" <simon.mourier@mycompany.com> a
écrit dans le message de news:
ucZCTAISGHA.2300@TK2MSFTNGP11.phx.gbl...
arggghhh .... 51 lignes (dans un éditeur avec plus de 80
colonnes)...
bon je n'ai pas le safe, mais il faut juste adapter complètement
http://support.microsoft.com/default.aspx?scid=kb;en-us;165721
faut bosser maintenant :-)
Simon
www.softfluent.com
[DllImport("Kernel32.dll", SetLastError = true)]
static extern IntPtr CreateFile(string lpFileName, int
dwDesiredAccess,
int dwShareMode, IntPtr lpSecurityAttributes, int
dwCreationDisposition, int
dwFlagsAndAttributes, IntPtr hTemplateFile);
[DllImport("Kernel32.dll", SetLastError = true)]
static extern bool DeviceIoControl(IntPtr hDevice, int
dwIoControlCode,
IntPtr lpInBuffer, int nInBufferSize, IntPtr lpOutBuffer, int
nOutBufferSize, out int lpBytesReturned, IntPtr lpOverlapped);
[DllImport("Kernel32.dll", SetLastError = true)]
static extern bool CloseHandle(IntPtr hObject);
const int GENERIC_READ = unchecked((int)0x80000000);
const int FILE_SHARE_READ = 0x00000001;
const int FILE_SHARE_WRITE = 0x00000002;
const int OPEN_EXISTING = 3;
const int IOCTL_STORAGE_EJECT_MEDIA = 0x2D4808;
static bool EjectVolume(string volumeName)
{
IntPtr hFile = CreateFile(@"\." + volumeName, GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE, IntPtr.Zero, OPEN_EXISTING,
0,
IntPtr.Zero);
if (hFile == new IntPtr(-1))
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
try
{
int bytesReturned;
if (!DeviceIoControl(hFile, IOCTL_STORAGE_EJECT_MEDIA,
IntPtr.Zero, 0,
IntPtr.Zero, 0, out bytesReturned, IntPtr.Zero))
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
}
finally
{
CloseHandle(hFile);
}
return false;
}
static void EjectAllUsbVolumes()
{
foreach(ManagementObject drive in new
ManagementObjectSearcher("select *
from Win32_DiskDrive where InterfaceType='USB'").Get())
{
foreach(ManagementObject partition in new
ManagementObjectSearcher("ASSOCIATORS OF
{Win32_DiskDrive.DeviceID='" +
drive["DeviceID"] + "'} WHERE AssocClass >>>>>>>>>>> Win32_DiskDriveToDiskPartition").Get())
{
Console.WriteLine("Partition=" + partition["Name"]);
foreach(ManagementObject disk in new
ManagementObjectSearcher("ASSOCIATORS OF
{Win32_DiskPartition.DeviceID='" +
partition["DeviceID"] + "'} WHERE AssocClass >>>>>>>>>>> Win32_LogicalDiskToPartition").Get())
{
Console.WriteLine("Disk=" + disk["Name"]);
EjectVolume(disk["Name"].ToString());
}
}
Console.WriteLine("Serial=" + new
ManagementObject("Win32_PhysicalMedia.Tag='" + drive["DeviceID"]
+
"'")["SerialNumber"]);
}
}
"Vincent" <vincent31spamaoter@wanadoo.fr> a écrit dans le
message de news:
u3e7AdFSGHA.4384@tk2msftngp13.phx.gbl...
Même que l'ejection de la clé usb en mode "safe" je suis
preneur
Vincent
"Merlin" <Merlin@LesFees.Net> a écrit dans le message de news:
mn.79327d639749c88b.18651@LesFees.Net...
ps : s'il y a 20 lignes je suis preneur quand même
je dirais que même jusqu'à 40 c'est encore assez rentable :-)
--
///\3rL1n____
Dans l'ordre je fais :
CreateFile (retourne handle)
FlushFileBuffers
FSCTL_LOCK_VOLUME (retourne ok)
FSCTL_DISMOUNT_VOLUME(retourne ok)
IOCTL_STORAGE_MEDIA_REMOVAL(retourne ok)
IOCTL_STORAGE_EJECT_MEDIA(retourne ok)
Closehandle(retourne ok)
Mais, d'apres les infos que j'ai trouvé, le problème c'est windows 2000
qui ouvre toujours une fenêtre pour indiquer
qu'un périphérique usb à été déconnecté sauvagement :) , sous windows XP à
part un petit "ding" c'est pas génant.
Pour windows 2000 il faut, semble t'il, à l'installation du périphérique
usb, indiquer que celui_ci peut être retiré sans
prévenir avec SurpriseRemovalOK=vrai.
Il faut pour cela faire un driver filtrer ..... ( c'est là que ça se
gate!!!!!!)
Je sais pas faire, je désire utiliser le driver principal proposé par
windows 2000 ....
une idée ?
Quelqu'un l'a t'il déjà fait ? des conseils ?
Cà semble plus simple de passer sous XP :)
Y a forcement une solution simple ????
Merci
Vincent
"Paul Bacelar" a écrit dans le message
de news: e%238v$Avez-vous verrouillé le volume avant de le démonter avec
"FSCTL_DISMOUNT_VOLUME".
Faites vos programmes de preuve de concept en C pour ne pas avoir de
problème de marshalling, puis, quand tous les menu problèmes sons résolu,
passez à C#.
Si vous avez en tête de faire une solution pérenne et fiable, un filter
driver sera une bonne solution.
--
Paul Bacelar
MVP VC++
"Vincent" wrote in message
news:il faut réaliser un filtre driver ??
"Paul Bacelar" a écrit dans le
message de news: %23$C'est du Kernel, donc pas de .NET, donc pas de C#.
Pourquoi ne pas faire un petit Driver en C de base.
--
Paul Bacelar
MVP VC++
"Vincent" wrote in message
news:%Apres de longues recherches :) , SurpriseRemovalOK est la clé de tout
!
quelqu'un sait'il comment passer cette valeur à 1 en C# ?
Merci
Vincent
"Vincent" a écrit dans le message de
news:Par rapport à la doc microsoft ( du lien que tu m'as donné ) tout est
ok :
toutes les étapes renvoient OK.
Si j'ouvre l'explorateur de fichier, le lecteur est toujours présent
même s'il est sans données
(si je clique dessus , message = insérez un disque dans le lecteur
F:)
Faut le faire disparaître !!!! :)
Vincent
"Vincent" a écrit dans le message de
news:Merci pour ton aide,
j'ai suivi les directives du lien
http://support.microsoft.com/default.aspx?scid=kb;en-us;165721
j'obtien des résultats. mais pour
DeviceIoControl(hDrive,FSCTL_DISMOUNT_VOLUME,IntPtr.Zero,0,IntPtr.Zero,0,ref
octet_retour,IntPtr.Zero)
Renvoi l'erreur 112 sous 2000
et
sous xp : err 24 , Le programme a émis une commande de longueur
incorrecte
Je sais pas trop quoi faire.
La clé est prète à être éjectée pas l'utilisateur, mais à ce moment
une fenêtre (sous 2000)
indique qu'on a retiré la clé brusquement et il faut cliquer ok pour
continuer !
Le client dit : non j'en veut pas
je suis ds le caca :)
Vincent
"Simon Mourier [SoftFluent]" a écrit
dans le message de news:Malheureusement, la norme USB n'impose pas de numéro de série pour
un périphérique, quel qu'il soit. Etes vous sûr que le disque en
question a un numéro de série?
voir ici:
http://blogs.msdn.com/oldnewthing/archive/2004/11/10/255047.aspx
Simon.
www.softfluent.com
"Vincent" a écrit dans le message
de news:Je découvre ManagementObject,
new ManagementObject("Win32_PhysicalMedia.Tag='" +
drive["DeviceID"] + "'")["SerialNumber"] semble ne rien retourner
?
Vincent
"Vincent" a écrit dans le message
de news:Je vais voir tout ça, il y en a déjà une bonne partie que
j'utilise : Createfile,deviceiocontrol,closehandle...
je regarde avec beaucoup d'interet ....
Merci
A bientot pour le cpte rendu :)
Vincent
"Simon Mourier [SoftFluent]" a
écrit dans le message de news:arggghhh .... 51 lignes (dans un éditeur avec plus de 80
colonnes)...
bon je n'ai pas le safe, mais il faut juste adapter complètement
http://support.microsoft.com/default.aspx?scid=kb;en-us;165721
faut bosser maintenant :-)
Simon
www.softfluent.com
[DllImport("Kernel32.dll", SetLastError = true)]
static extern IntPtr CreateFile(string lpFileName, int
dwDesiredAccess,
int dwShareMode, IntPtr lpSecurityAttributes, int
dwCreationDisposition, int
dwFlagsAndAttributes, IntPtr hTemplateFile);
[DllImport("Kernel32.dll", SetLastError = true)]
static extern bool DeviceIoControl(IntPtr hDevice, int
dwIoControlCode,
IntPtr lpInBuffer, int nInBufferSize, IntPtr lpOutBuffer, int
nOutBufferSize, out int lpBytesReturned, IntPtr lpOverlapped);
[DllImport("Kernel32.dll", SetLastError = true)]
static extern bool CloseHandle(IntPtr hObject);
const int GENERIC_READ = unchecked((int)0x80000000);
const int FILE_SHARE_READ = 0x00000001;
const int FILE_SHARE_WRITE = 0x00000002;
const int OPEN_EXISTING = 3;
const int IOCTL_STORAGE_EJECT_MEDIA = 0x2D4808;
static bool EjectVolume(string volumeName)
{
IntPtr hFile = CreateFile(@"." + volumeName, GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE, IntPtr.Zero, OPEN_EXISTING,
0,
IntPtr.Zero);
if (hFile == new IntPtr(-1))
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
try
{
int bytesReturned;
if (!DeviceIoControl(hFile, IOCTL_STORAGE_EJECT_MEDIA,
IntPtr.Zero, 0,
IntPtr.Zero, 0, out bytesReturned, IntPtr.Zero))
Marshal.ThrowExceptionForHR(Marshal.GetLastWin32Error());
}
finally
{
CloseHandle(hFile);
}
return false;
}
static void EjectAllUsbVolumes()
{
foreach(ManagementObject drive in new
ManagementObjectSearcher("select *
from Win32_DiskDrive where InterfaceType='USB'").Get())
{
foreach(ManagementObject partition in new
ManagementObjectSearcher("ASSOCIATORS OF
{Win32_DiskDrive.DeviceID='" +
drive["DeviceID"] + "'} WHERE AssocClass >>>>>>>>>>> Win32_DiskDriveToDiskPartition").Get())
{
Console.WriteLine("Partition=" + partition["Name"]);
foreach(ManagementObject disk in new
ManagementObjectSearcher("ASSOCIATORS OF
{Win32_DiskPartition.DeviceID='" +
partition["DeviceID"] + "'} WHERE AssocClass >>>>>>>>>>> Win32_LogicalDiskToPartition").Get())
{
Console.WriteLine("Disk=" + disk["Name"]);
EjectVolume(disk["Name"].ToString());
}
}
Console.WriteLine("Serial=" + new
ManagementObject("Win32_PhysicalMedia.Tag='" + drive["DeviceID"]
+
"'")["SerialNumber"]);
}
}
"Vincent" a écrit dans le
message de news:Même que l'ejection de la clé usb en mode "safe" je suis
preneur
Vincent
"Merlin" a écrit dans le message de news:ps : s'il y a 20 lignes je suis preneur quand même
je dirais que même jusqu'à 40 c'est encore assez rentable :-)
--
///3rL1n____