Hola yo use una ves esta funcion de Karcrack que es algo asi como decis vos pero es rápida y funciona bien.
Public Enum AccessType
GENERIC_READ = &H80000000
GENERIC_WRITE = &H40000000
GENERIC_READWRITE = &HC0000000
End Enum
Public Function CheckAccess(ByVal sPath As String, ByVal dwDesiredAccess As AccessType) As Long 'by Karcrack
Dim lRet As Long
lRet = CreateFile(sPath, dwDesiredAccess, FILE_SHARE_READ + FILE_SHARE_WRITE, ByVal 0&, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0)
If (lRet <> INVALID_HANDLE_VALUE) Then
Call CloseHandle(lRet)
CheckAccess = 1
End If
End Function
completa las apis y constantes.