EJETAR PEN DRIVE
Seguinte:
Tô com uma idéia de:
espetar minha pen
abrir tela de senha
se senha conferir - abre
sen não - ejeta
pra evitar xeretas tenatndo copiar minha pen, como aconteceu no trampo, deixei rodando músicas e
o windows bloqueado com senha, mas, um sujeito, tirou minha pen e estava copiando em outra máquina
pensando que eu ia demorar.
Acontece que voltei antes do previsto e o camarada copiando minha pen, conclusão
porrada, delegacia, fora a sindicância na empresa ( infraero - do miminstério da defesa) é claro
que na empresa isso não dá em nada, mas eu vou responder por agressão, o que também
não vai dar em nada, mas o camarada vai também responder por espionagem (acho) e tentativa
de furto. pode não dar em nada, mas vai ter dor de cabeça pelo menos.
. . .
A idéia está sendo construÃda, mas, procurei na net e não achei, Ejetar Pen Drive pelo VB6, só o que me
falta é por comando do vb6 ejetar a pen pois, se alguém tentar me furtar ou furtar a minha pen,
vai espetar e não tendo a senha, vai ejetar, não podendo nem mesmo com internet expolrer abrir.
O problema não são meus programas na pen, pois todos estão protegidos com senha, e rodam exclusivamente
na minha pen, não rodando em nhenhuma outra undiade de disco em que possam ser copiados.
Só que tenho outros arquivos particulares na pen que gostaria de proteger.
Pra completar a idéia, só me falta ( se alguém tiver e puder disponibilizar ), os comandos pra ejecção da pen
pelo VB.
Agradeço antecipadamente
Blz . . .
ai vai o codigo que estou utilizando
Option Explicit
Private Declare Function CM_Get_DevNode_Status Lib [Ô]setupapi.dll[Ô] (lStatus As Long, lProblem As Long, ByVal hDevice As Long, ByVal dwFlags As Long) As Long
Private Declare Function CM_Get_Parent Lib [Ô]setupapi.dll[Ô] (hParentDevice As Long, ByVal hDevice As Long, ByVal dwFlags As Long) As Long
Private Declare Function CM_Locate_DevNodeA Lib [Ô]setupapi.dll[Ô] (hDevice As Long, ByVal lpDeviceName As Long, ByVal dwFlags As Long) As Long
Private Declare Function CM_Request_Device_EjectA Lib [Ô]setupapi.dll[Ô] (ByVal hDevice As Long, lVetoType As Long, ByVal lpVetoName As Long, ByVal cbVetoName As Long, ByVal dwFlags As Long) As Long
Private Declare Function RegCloseKey Lib [Ô]advapi32.dll[Ô] (ByVal hKey As Long) As Long
Private Declare Function RegOpenKeyEx Lib [Ô]advapi32.dll[Ô] Alias [Ô]RegOpenKeyExA[Ô] (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
Private Declare Function RegQueryValueEx Lib [Ô]advapi32.dll[Ô] Alias [Ô]RegQueryValueExA[Ô] (ByVal hKey As Long, ByVal lpszValueName As String, ByVal lpdwReserved As Long, lpdwType As Long, lpData As Any, lpcbData As Long) As Long
[ô] Safely remove USB flash drive
Public Function SafelyRemove(ByVal pstrDrive As String) As Boolean
Const DN_REMOVABLE = &H4000
Dim strDeviceInstance As String
Dim lngDevice As Long
Dim lngStatus As Long
Dim lngProblem As Long
Dim lngVetoType As Long
Dim strVeto As String * 255
pstrDrive = UCase$(Left$(pstrDrive, 1)) & [Ô]:[Ô]
strDeviceInstance = StrConv(GetDeviceInstance(pstrDrive), vbFromUnicode)
If CM_Locate_DevNodeA(lngDevice, StrPtr(strDeviceInstance), 0) = 0 Then
If CM_Get_DevNode_Status(lngStatus, lngProblem, lngDevice, 0) = 0 Then
Do While Not (lngStatus And DN_REMOVABLE) > 0
If CM_Get_Parent(lngDevice, lngDevice, 0) <> 0 Then Exit Do
If CM_Get_DevNode_Status(lngStatus, lngProblem, lngDevice, 0) <> 0 Then Exit Do
Loop
If (lngStatus And DN_REMOVABLE) > 0 Then SafelyRemove = (CM_Request_Device_EjectA(lngDevice, lngVetoType, StrPtr(strVeto), 255, 0) = 0)
End If
End If
End Function
Private Function GetDeviceInstance(pstrDrive As String) As String
Const HKEY_LOCAL_MACHINE = &H80000002
Const KEY_QUERY_VALUE = &H1
Const REG_BINARY = &H3
Const ERROR_SUCCESS = 0&
Dim strKey As String
Dim strValue As String
Dim lngHandle As Long
Dim lngType As Long
Dim strBuffer As String
Dim lngLen As Long
Dim bytArray() As Byte
strKey = [Ô]SYSTEM\MountedDevices[Ô]
strValue = [Ô]\DosDevices\[Ô] & pstrDrive
If RegOpenKeyEx(HKEY_LOCAL_MACHINE, strKey, 0&, KEY_QUERY_VALUE, lngHandle) = ERROR_SUCCESS Then
If RegQueryValueEx(lngHandle, strValue, 0&, lngType, 0&, lngLen) = 234 Then
If lngType = REG_BINARY Then
strBuffer = Space$(lngLen)
If RegQueryValueEx(lngHandle, strValue, 0&, 0&, ByVal strBuffer, lngLen) = ERROR_SUCCESS Then
If lngLen > 0 Then
ReDim bytArray(lngLen - 1)
bytArray = Left$(strBuffer, lngLen)
strBuffer = StrConv(bytArray, vbFromUnicode)
Erase bytArray
If Left$(strBuffer, 4) = [Ô]\??\[Ô] Then
strBuffer = Mid$(strBuffer, 5, InStr(1, strBuffer, [Ô]{[Ô]) - 6)
GetDeviceInstance = Replace(strBuffer, [Ô]#[Ô], [Ô]\[Ô])
End If
End If
End If
End If
End If
RegCloseKey lngHandle
End If
End Function
Private Sub Form_KeyPress(KeyAscii As Integer)
If KeyAscii = 27 Then Unload Me
End Sub
Private Sub Form_Unload(Cancel As Integer)
If SafelyRemove([Ô]F:[Ô]) Then
MsgBox [Ô]O Pen Driver Já pode ser remolvido com segurança[Ô], vbInformation, [Ô]Remover Pen Driver[Ô]
End If
If SafelyRemove([Ô]G:[Ô]) Then
MsgBox [Ô]O Pen Driver Já pode ser remolvido com segurança[Ô], vbInformation, [Ô]Remover Pen Driver[Ô]
End If
If SafelyRemove([Ô]H:[Ô]) Then
MsgBox [Ô]O Pen Driver Já pode ser remolvido com segurança[Ô], vbInformation, [Ô]atenção[Ô]
End If
End Sub
Private Sub Timer1_Timer()
If SafelyRemove([Ô]F:[Ô]) Then
MsgBox [Ô]O Pen Driver Já pode ser remolvido com segurança[Ô], vbInformation, [Ô]Remover Pen Driver[Ô]
End If
If SafelyRemove([Ô]G:[Ô]) Then
MsgBox [Ô]O Pen Driver Já pode ser remolvido com segurança[Ô], vbInformation, [Ô]Remover Pen Driver[Ô]
End If
If SafelyRemove([Ô]H:[Ô]) Then
MsgBox [Ô]O Pen Driver Já pode ser remolvido com segurança[Ô], vbInformation, [Ô]atenção[Ô]
End If
Unload Me
End Sub
Option Explicit
Private Declare Function CM_Get_DevNode_Status Lib [Ô]setupapi.dll[Ô] (lStatus As Long, lProblem As Long, ByVal hDevice As Long, ByVal dwFlags As Long) As Long
Private Declare Function CM_Get_Parent Lib [Ô]setupapi.dll[Ô] (hParentDevice As Long, ByVal hDevice As Long, ByVal dwFlags As Long) As Long
Private Declare Function CM_Locate_DevNodeA Lib [Ô]setupapi.dll[Ô] (hDevice As Long, ByVal lpDeviceName As Long, ByVal dwFlags As Long) As Long
Private Declare Function CM_Request_Device_EjectA Lib [Ô]setupapi.dll[Ô] (ByVal hDevice As Long, lVetoType As Long, ByVal lpVetoName As Long, ByVal cbVetoName As Long, ByVal dwFlags As Long) As Long
Private Declare Function RegCloseKey Lib [Ô]advapi32.dll[Ô] (ByVal hKey As Long) As Long
Private Declare Function RegOpenKeyEx Lib [Ô]advapi32.dll[Ô] Alias [Ô]RegOpenKeyExA[Ô] (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
Private Declare Function RegQueryValueEx Lib [Ô]advapi32.dll[Ô] Alias [Ô]RegQueryValueExA[Ô] (ByVal hKey As Long, ByVal lpszValueName As String, ByVal lpdwReserved As Long, lpdwType As Long, lpData As Any, lpcbData As Long) As Long
[ô] Safely remove USB flash drive
Public Function SafelyRemove(ByVal pstrDrive As String) As Boolean
Const DN_REMOVABLE = &H4000
Dim strDeviceInstance As String
Dim lngDevice As Long
Dim lngStatus As Long
Dim lngProblem As Long
Dim lngVetoType As Long
Dim strVeto As String * 255
pstrDrive = UCase$(Left$(pstrDrive, 1)) & [Ô]:[Ô]
strDeviceInstance = StrConv(GetDeviceInstance(pstrDrive), vbFromUnicode)
If CM_Locate_DevNodeA(lngDevice, StrPtr(strDeviceInstance), 0) = 0 Then
If CM_Get_DevNode_Status(lngStatus, lngProblem, lngDevice, 0) = 0 Then
Do While Not (lngStatus And DN_REMOVABLE) > 0
If CM_Get_Parent(lngDevice, lngDevice, 0) <> 0 Then Exit Do
If CM_Get_DevNode_Status(lngStatus, lngProblem, lngDevice, 0) <> 0 Then Exit Do
Loop
If (lngStatus And DN_REMOVABLE) > 0 Then SafelyRemove = (CM_Request_Device_EjectA(lngDevice, lngVetoType, StrPtr(strVeto), 255, 0) = 0)
End If
End If
End Function
Private Function GetDeviceInstance(pstrDrive As String) As String
Const HKEY_LOCAL_MACHINE = &H80000002
Const KEY_QUERY_VALUE = &H1
Const REG_BINARY = &H3
Const ERROR_SUCCESS = 0&
Dim strKey As String
Dim strValue As String
Dim lngHandle As Long
Dim lngType As Long
Dim strBuffer As String
Dim lngLen As Long
Dim bytArray() As Byte
strKey = [Ô]SYSTEM\MountedDevices[Ô]
strValue = [Ô]\DosDevices\[Ô] & pstrDrive
If RegOpenKeyEx(HKEY_LOCAL_MACHINE, strKey, 0&, KEY_QUERY_VALUE, lngHandle) = ERROR_SUCCESS Then
If RegQueryValueEx(lngHandle, strValue, 0&, lngType, 0&, lngLen) = 234 Then
If lngType = REG_BINARY Then
strBuffer = Space$(lngLen)
If RegQueryValueEx(lngHandle, strValue, 0&, 0&, ByVal strBuffer, lngLen) = ERROR_SUCCESS Then
If lngLen > 0 Then
ReDim bytArray(lngLen - 1)
bytArray = Left$(strBuffer, lngLen)
strBuffer = StrConv(bytArray, vbFromUnicode)
Erase bytArray
If Left$(strBuffer, 4) = [Ô]\??\[Ô] Then
strBuffer = Mid$(strBuffer, 5, InStr(1, strBuffer, [Ô]{[Ô]) - 6)
GetDeviceInstance = Replace(strBuffer, [Ô]#[Ô], [Ô]\[Ô])
End If
End If
End If
End If
End If
RegCloseKey lngHandle
End If
End Function
Private Sub Form_KeyPress(KeyAscii As Integer)
If KeyAscii = 27 Then Unload Me
End Sub
Private Sub Form_Unload(Cancel As Integer)
If SafelyRemove([Ô]F:[Ô]) Then
MsgBox [Ô]O Pen Driver Já pode ser remolvido com segurança[Ô], vbInformation, [Ô]Remover Pen Driver[Ô]
End If
If SafelyRemove([Ô]G:[Ô]) Then
MsgBox [Ô]O Pen Driver Já pode ser remolvido com segurança[Ô], vbInformation, [Ô]Remover Pen Driver[Ô]
End If
If SafelyRemove([Ô]H:[Ô]) Then
MsgBox [Ô]O Pen Driver Já pode ser remolvido com segurança[Ô], vbInformation, [Ô]atenção[Ô]
End If
End Sub
Private Sub Timer1_Timer()
If SafelyRemove([Ô]F:[Ô]) Then
MsgBox [Ô]O Pen Driver Já pode ser remolvido com segurança[Ô], vbInformation, [Ô]Remover Pen Driver[Ô]
End If
If SafelyRemove([Ô]G:[Ô]) Then
MsgBox [Ô]O Pen Driver Já pode ser remolvido com segurança[Ô], vbInformation, [Ô]Remover Pen Driver[Ô]
End If
If SafelyRemove([Ô]H:[Ô]) Then
MsgBox [Ô]O Pen Driver Já pode ser remolvido com segurança[Ô], vbInformation, [Ô]atenção[Ô]
End If
Unload Me
End Sub
Blz . . .
Funcionou perfeitamente.
Agora vou implementar um exe que seja carregado quando a pen drive for escpetada e se por
acaso a senha não conferir ou se por acaso o foco for desviado, ejetar a pen pra não
dar chance aos [Ô]amigos[Ô] que desejarem bisbilhotar.
Obrigado
. . .
Gente.
Desculpa estar reabrindo o tópico, mas, o código do InfoSistemas funciona blz quando o projeto está em uma
unidade que não seja a pen drive.
todos os meus projetos estão em E: e a pen drive é G:
em E: rodo o projeto e realmente ejeta a pen drive, mas em G: (pen drive) até informa que a pen drive pode ser
removida, mas não ejeta a mesma, continua tendo acesso total.
Eu sei que até mesmo um autorun na pen drive não vai ser facil de montar, mas o que é preciso é tipo,
no internet explorer, clicanco na unidade da pen drive com o botão direito do mouse, há acesso a um menu
ejetar e clicando nesse menu a pen é ejetada. Também em meu computador dá acesso ao mesmo menu
O que preciso é saber como acessar esse tipo de menu no internet explorer, mas de preferência via comandos
do vb6 acessar meu computador e ejetar a pen.
Tudo isso, é claro se for possÃvel e alguem souber como.
Obrigado de qualquer forma ao info e outros que venham a ajudar na dúvida.
. . .
Desculpa estar reabrindo o tópico, mas, o código do InfoSistemas funciona blz quando o projeto está em uma
unidade que não seja a pen drive.
todos os meus projetos estão em E: e a pen drive é G:
em E: rodo o projeto e realmente ejeta a pen drive, mas em G: (pen drive) até informa que a pen drive pode ser
removida, mas não ejeta a mesma, continua tendo acesso total.
Eu sei que até mesmo um autorun na pen drive não vai ser facil de montar, mas o que é preciso é tipo,
no internet explorer, clicanco na unidade da pen drive com o botão direito do mouse, há acesso a um menu
ejetar e clicando nesse menu a pen é ejetada. Também em meu computador dá acesso ao mesmo menu
O que preciso é saber como acessar esse tipo de menu no internet explorer, mas de preferência via comandos
do vb6 acessar meu computador e ejetar a pen.
Tudo isso, é claro se for possÃvel e alguem souber como.
Obrigado de qualquer forma ao info e outros que venham a ajudar na dúvida.
. . .
sobre a questão do pen drive enjetar, vc tem que ter os programas rodando em outro local pois se o programa esta rodando dentro da unidade o sistema operacional vai dizer que não pode remover pois esta em utilização !! sendo assim acho melhor vc criar um script para na hora que acionar o pendrive ele gere um auto run dentro da unidade c:temp ai depois que sair de o camando para apagar o temp entendeu ! sim faltou me pontua kkkkkk
Ai mano.
Eu já tinha encerrado e te creditado os pontos; decidi reabri-lo, mas vi na net que no pen drive vai ser difÃcil eu conseguir
o intento de fazer funcionar o autorun da forma que queria.
De qualquer forma te agradeço e estou encerrando novamente e te devolvendo os pontos anteriormente creditados.
Blz . . .
e Obrigado mais uma vêz.
MICROSCHEME ,
a idéia é criar um AUTORUN.inf e mandar chamar um arquivo de lote [Ô].BAT[Ô] e mandar copiar este EXE para um unidade de disco fixa em algum local oculto depois mandar executar de lá, pq se não for assim não conseguirá ejetar o pen, pois na memória ele está apartir do pendrive e não conseguirá se autoejetar.
[]'s
a idéia é criar um AUTORUN.inf e mandar chamar um arquivo de lote [Ô].BAT[Ô] e mandar copiar este EXE para um unidade de disco fixa em algum local oculto depois mandar executar de lá, pq se não for assim não conseguirá ejetar o pen, pois na memória ele está apartir do pendrive e não conseguirá se autoejetar.
[]'s
Tópico encerrado , respostas não são mais permitidas