EJETAR PEN DRIVE

MICROSCHEME 05/05/2010 10:21:34
#340977

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 . . .

INFOSISTEMAS 05/05/2010 10:32:03
#340978
Resposta escolhida
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
MICROSCHEME 05/05/2010 12:37:48
#340992

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

. . .

MICROSCHEME 05/05/2010 18:00:36
#341041
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.

. . .

INFOSISTEMAS 06/05/2010 09:45:57
#341085
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
MICROSCHEME 06/05/2010 10:15:21
#341086

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.

NATO 06/05/2010 13:47:12
#341118
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
Tópico encerrado , respostas não são mais permitidas