Reste une autre question : si c'est pour faire un soft .net dont l'essentiel des fonctions se passe par du p/invoke, autant prendre un compilo win32 ?
Je suis d'accord. L'utilisation d'Interop doit se limiter, à mon humble avis, aux cas suivants:
1. Le framework ne sait pas faire. 2. J'ai un composant Win32 non porté sous .Net et dont je n'ai pas le source. 3. J'interagis avec le monde non managé sans alternative purement .Net.
Que certaines parties du framework fassent elles-mêmes appel à P/Invoke n'est pas une justifiaction en soi. C'est l'implémentation interne du framework *aujourd'hui* et elle est susceptible de changer à tout moment, ce qui arrivera nécessairement avec les technologies annoncées ou en preview. Ce n'est pas parce qu'on peut désassembler le code du framework qu'il faut nécessairement tirer des conclusions de ce que l'on y trouve.
Ajoutons à cela que toute incursion dans le monde non managé met l'application hors contrôle de la CLR pendant le temps de l'appel. On perd ainsi le bénéfice de ses services avancés (exceptions, garbage collector,...).
-- Patrick Philippot - Microsoft MVP MainSoft Consulting Services www.mainsoft.fr
Merlin wrote:
Reste une autre question : si c'est pour faire un soft .net dont
l'essentiel des fonctions se passe par du p/invoke, autant prendre un
compilo win32 ?
Je suis d'accord. L'utilisation d'Interop doit se limiter, à mon humble
avis, aux cas suivants:
1. Le framework ne sait pas faire.
2. J'ai un composant Win32 non porté sous .Net et dont je n'ai pas le
source.
3. J'interagis avec le monde non managé sans alternative purement .Net.
Que certaines parties du framework fassent elles-mêmes appel à P/Invoke
n'est pas une justifiaction en soi. C'est l'implémentation interne du
framework *aujourd'hui* et elle est susceptible de changer à tout
moment, ce qui arrivera nécessairement avec les technologies annoncées
ou en preview. Ce n'est pas parce qu'on peut désassembler le code du
framework qu'il faut nécessairement tirer des conclusions de ce que l'on
y trouve.
Ajoutons à cela que toute incursion dans le monde non managé met
l'application hors contrôle de la CLR pendant le temps de l'appel. On
perd ainsi le bénéfice de ses services avancés (exceptions, garbage
collector,...).
--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
Reste une autre question : si c'est pour faire un soft .net dont l'essentiel des fonctions se passe par du p/invoke, autant prendre un compilo win32 ?
Je suis d'accord. L'utilisation d'Interop doit se limiter, à mon humble avis, aux cas suivants:
1. Le framework ne sait pas faire. 2. J'ai un composant Win32 non porté sous .Net et dont je n'ai pas le source. 3. J'interagis avec le monde non managé sans alternative purement .Net.
Que certaines parties du framework fassent elles-mêmes appel à P/Invoke n'est pas une justifiaction en soi. C'est l'implémentation interne du framework *aujourd'hui* et elle est susceptible de changer à tout moment, ce qui arrivera nécessairement avec les technologies annoncées ou en preview. Ce n'est pas parce qu'on peut désassembler le code du framework qu'il faut nécessairement tirer des conclusions de ce que l'on y trouve.
Ajoutons à cela que toute incursion dans le monde non managé met l'application hors contrôle de la CLR pendant le temps de l'appel. On perd ainsi le bénéfice de ses services avancés (exceptions, garbage collector,...).
-- Patrick Philippot - Microsoft MVP MainSoft Consulting Services www.mainsoft.fr
J'ai en fin de compte fait appel à la dll kernel32.dll. J'encapsule ça dans une fonction, si je dois porter mon programme je changerai juste cette méthode.
J'arrive donc à faire une closehandle, j'avance enfin. Même si windows cri quand j'enlève la clé, car s'il constate que le lecteur est toujours là (même s'il n'est plus actif). Ma mission à présent : mettre à jour le système pour qu'il déconnecte tout ( la lettre du drive rétiré, ici un clé usb, est toujours présente)
Vincent
ps : quand tout marchera je vous passerai le code sica oeut aider
"Merlin" a écrit dans le message de news:
parfaitement d'accord.
--
///3rL1n____
J'ai en fin de compte fait appel à la dll kernel32.dll.
J'encapsule ça dans une fonction, si je dois porter mon programme
je changerai juste cette méthode.
J'arrive donc à faire une closehandle, j'avance enfin. Même si windows
cri quand j'enlève la clé, car s'il constate que le lecteur est toujours là
(même s'il n'est plus actif). Ma mission à présent : mettre à jour le
système
pour qu'il déconnecte tout ( la lettre du drive rétiré, ici un clé usb, est
toujours
présente)
Vincent
ps : quand tout marchera je vous passerai le code sica oeut aider
"Merlin" <Merlin@LesFees.Net> a écrit dans le message de news:
mn.60617d6373f96cf2.18651@LesFees.Net...
J'ai en fin de compte fait appel à la dll kernel32.dll. J'encapsule ça dans une fonction, si je dois porter mon programme je changerai juste cette méthode.
J'arrive donc à faire une closehandle, j'avance enfin. Même si windows cri quand j'enlève la clé, car s'il constate que le lecteur est toujours là (même s'il n'est plus actif). Ma mission à présent : mettre à jour le système pour qu'il déconnecte tout ( la lettre du drive rétiré, ici un clé usb, est toujours présente)
Vincent
ps : quand tout marchera je vous passerai le code sica oeut aider
"Merlin" a écrit dans le message de news:
parfaitement d'accord.
--
///3rL1n____
Simon Mourier [SoftFluent]
Euh.... je ne vois absolument pourquoi j'irai m'embêter à utiliser une librairie externe d'origine incertaine, qui installe un driver kernel (!), qui plus est écrite dans un language non managé, alors que je peux tout faire en C# à partir de l'API documentée en 10 lignes de code? Car c'est bien de cela qu'on parle ici... On ne parle pas de l'utilisation de l'interop en général. Comme dirait l'autre, il y a mieux, mais c'est moins cher, et réciproquement.
Simon. www.softfluent.com
"Patrick Philippot" a écrit dans le message de news: %
Merlin wrote:
Reste une autre question : si c'est pour faire un soft .net dont l'essentiel des fonctions se passe par du p/invoke, autant prendre un compilo win32 ?
Je suis d'accord. L'utilisation d'Interop doit se limiter, à mon humble avis, aux cas suivants:
1. Le framework ne sait pas faire. 2. J'ai un composant Win32 non porté sous .Net et dont je n'ai pas le source. 3. J'interagis avec le monde non managé sans alternative purement .Net.
Que certaines parties du framework fassent elles-mêmes appel à P/Invoke n'est pas une justifiaction en soi. C'est l'implémentation interne du framework *aujourd'hui* et elle est susceptible de changer à tout moment, ce qui arrivera nécessairement avec les technologies annoncées ou en preview. Ce n'est pas parce qu'on peut désassembler le code du framework qu'il faut nécessairement tirer des conclusions de ce que l'on y trouve.
Ajoutons à cela que toute incursion dans le monde non managé met l'application hors contrôle de la CLR pendant le temps de l'appel. On perd ainsi le bénéfice de ses services avancés (exceptions, garbage collector,...).
-- Patrick Philippot - Microsoft MVP MainSoft Consulting Services www.mainsoft.fr
Euh.... je ne vois absolument pourquoi j'irai m'embêter à utiliser une
librairie externe d'origine incertaine, qui installe un driver kernel (!),
qui plus est écrite dans un language non managé, alors que je peux tout
faire en C# à partir de l'API documentée en 10 lignes de code? Car c'est
bien de cela qu'on parle ici... On ne parle pas de l'utilisation de
l'interop en général. Comme dirait l'autre, il y a mieux, mais c'est moins
cher, et réciproquement.
Simon.
www.softfluent.com
"Patrick Philippot" <patrick.philippot@mainsoft.xx.fr> a écrit dans le
message de news: %23AK4FDTRGHA.5924@TK2MSFTNGP09.phx.gbl...
Merlin wrote:
Reste une autre question : si c'est pour faire un soft .net dont
l'essentiel des fonctions se passe par du p/invoke, autant prendre un
compilo win32 ?
Je suis d'accord. L'utilisation d'Interop doit se limiter, à mon humble
avis, aux cas suivants:
1. Le framework ne sait pas faire.
2. J'ai un composant Win32 non porté sous .Net et dont je n'ai pas le
source.
3. J'interagis avec le monde non managé sans alternative purement .Net.
Que certaines parties du framework fassent elles-mêmes appel à P/Invoke
n'est pas une justifiaction en soi. C'est l'implémentation interne du
framework *aujourd'hui* et elle est susceptible de changer à tout moment,
ce qui arrivera nécessairement avec les technologies annoncées ou en
preview. Ce n'est pas parce qu'on peut désassembler le code du framework
qu'il faut nécessairement tirer des conclusions de ce que l'on y trouve.
Ajoutons à cela que toute incursion dans le monde non managé met
l'application hors contrôle de la CLR pendant le temps de l'appel. On perd
ainsi le bénéfice de ses services avancés (exceptions, garbage
collector,...).
--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
Euh.... je ne vois absolument pourquoi j'irai m'embêter à utiliser une librairie externe d'origine incertaine, qui installe un driver kernel (!), qui plus est écrite dans un language non managé, alors que je peux tout faire en C# à partir de l'API documentée en 10 lignes de code? Car c'est bien de cela qu'on parle ici... On ne parle pas de l'utilisation de l'interop en général. Comme dirait l'autre, il y a mieux, mais c'est moins cher, et réciproquement.
Simon. www.softfluent.com
"Patrick Philippot" a écrit dans le message de news: %
Merlin wrote:
Reste une autre question : si c'est pour faire un soft .net dont l'essentiel des fonctions se passe par du p/invoke, autant prendre un compilo win32 ?
Je suis d'accord. L'utilisation d'Interop doit se limiter, à mon humble avis, aux cas suivants:
1. Le framework ne sait pas faire. 2. J'ai un composant Win32 non porté sous .Net et dont je n'ai pas le source. 3. J'interagis avec le monde non managé sans alternative purement .Net.
Que certaines parties du framework fassent elles-mêmes appel à P/Invoke n'est pas une justifiaction en soi. C'est l'implémentation interne du framework *aujourd'hui* et elle est susceptible de changer à tout moment, ce qui arrivera nécessairement avec les technologies annoncées ou en preview. Ce n'est pas parce qu'on peut désassembler le code du framework qu'il faut nécessairement tirer des conclusions de ce que l'on y trouve.
Ajoutons à cela que toute incursion dans le monde non managé met l'application hors contrôle de la CLR pendant le temps de l'appel. On perd ainsi le bénéfice de ses services avancés (exceptions, garbage collector,...).
-- Patrick Philippot - Microsoft MVP MainSoft Consulting Services www.mainsoft.fr
Vincent
Très interessant ce que tu dis,
Donc en 10lignes (plutot en C# :)): tu identifis toutes les clé usb, leur numéro de série(n° hard constructeur), leur lettre associée et tu déconnecte sans problème la clé que tu désires( elle disparait de la liste des disques) et quand tu la retires, aucun message ne t'indique que tu as retiré la clé ! l'icone en bas, dans la barre des taches(la petite fleche verte) n'indique plus qu'il y a un périphérique usb à déconnecter.
Génial, tu peux éditer ton code, c'est exactement ce que je cherche depuis 15 jours
MERCI d'AVANCE Vincent
ps : s'il y a 20 lignes je suis preneur quand même
"Simon Mourier [SoftFluent]" a écrit dans le message de news:
Euh.... je ne vois absolument pourquoi j'irai m'embêter à utiliser une librairie externe d'origine incertaine, qui installe un driver kernel (!), qui plus est écrite dans un language non managé, alors que je peux tout faire en C# à partir de l'API documentée en 10 lignes de code? Car c'est bien de cela qu'on parle ici... On ne parle pas de l'utilisation de l'interop en général. Comme dirait l'autre, il y a mieux, mais c'est moins cher, et réciproquement.
Simon. www.softfluent.com
Très interessant ce que tu dis,
Donc en 10lignes (plutot en C# :)):
tu identifis toutes les clé usb, leur numéro de série(n° hard constructeur),
leur lettre associée
et tu déconnecte sans problème la clé que tu désires( elle disparait de la
liste des disques)
et quand tu la retires, aucun message ne t'indique que tu as retiré la clé !
l'icone en bas, dans la barre des taches(la petite fleche verte) n'indique
plus qu'il y a un périphérique
usb à déconnecter.
Génial, tu peux éditer ton code, c'est exactement ce que je cherche depuis
15 jours
MERCI d'AVANCE
Vincent
ps : s'il y a 20 lignes je suis preneur quand même
"Simon Mourier [SoftFluent]" <simon.mourier@mycompany.com> a écrit dans le
message de news: OGV17KvRGHA.3052@TK2MSFTNGP09.phx.gbl...
Euh.... je ne vois absolument pourquoi j'irai m'embêter à utiliser une
librairie externe d'origine incertaine, qui installe un driver kernel (!),
qui plus est écrite dans un language non managé, alors que je peux tout
faire en C# à partir de l'API documentée en 10 lignes de code? Car c'est
bien de cela qu'on parle ici... On ne parle pas de l'utilisation de
l'interop en général. Comme dirait l'autre, il y a mieux, mais c'est moins
cher, et réciproquement.
Donc en 10lignes (plutot en C# :)): tu identifis toutes les clé usb, leur numéro de série(n° hard constructeur), leur lettre associée et tu déconnecte sans problème la clé que tu désires( elle disparait de la liste des disques) et quand tu la retires, aucun message ne t'indique que tu as retiré la clé ! l'icone en bas, dans la barre des taches(la petite fleche verte) n'indique plus qu'il y a un périphérique usb à déconnecter.
Génial, tu peux éditer ton code, c'est exactement ce que je cherche depuis 15 jours
MERCI d'AVANCE Vincent
ps : s'il y a 20 lignes je suis preneur quand même
"Simon Mourier [SoftFluent]" a écrit dans le message de news:
Euh.... je ne vois absolument pourquoi j'irai m'embêter à utiliser une librairie externe d'origine incertaine, qui installe un driver kernel (!), qui plus est écrite dans un language non managé, alors que je peux tout faire en C# à partir de l'API documentée en 10 lignes de code? Car c'est bien de cela qu'on parle ici... On ne parle pas de l'utilisation de l'interop en général. Comme dirait l'autre, il y a mieux, mais c'est moins cher, et réciproquement.
Simon. www.softfluent.com
Merlin
> J'ai en fin de compte fait appel à la dll kernel32.dll. J'encapsule ça dans une fonction, si je dois porter mon programme je changerai juste cette méthode.
si c'est juste une seule fonction oui tu as raison, tu vas pas créer une dll win32 juste pour une fonction :-)
ps : quand tout marchera je vous passerai le code sica oeut aider
de toute façon ça pourra toujours aider qqun, donc c'est une bonne idée.
--
///3rL1n____
> J'ai en fin de compte fait appel à la dll kernel32.dll.
J'encapsule ça dans une fonction, si je dois porter mon programme
je changerai juste cette méthode.
si c'est juste une seule fonction oui tu as raison, tu vas pas créer
une dll win32 juste pour une fonction :-)
ps : quand tout marchera je vous passerai le code sica oeut aider
de toute façon ça pourra toujours aider qqun, donc c'est une bonne
idée.
> J'ai en fin de compte fait appel à la dll kernel32.dll. J'encapsule ça dans une fonction, si je dois porter mon programme je changerai juste cette méthode.
si c'est juste une seule fonction oui tu as raison, tu vas pas créer une dll win32 juste pour une fonction :-)
ps : quand tout marchera je vous passerai le code sica oeut aider
de toute façon ça pourra toujours aider qqun, donc c'est une bonne idée.
--
///3rL1n____
Merlin
> 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____
> 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 :-)
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____
Simon Mourier [SoftFluent]
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);
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;
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____
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);
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;
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 :-)
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);
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;
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____
Vincent
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);
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;
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);
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;
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 :-)
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);
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;
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 :-)