Hi ,
i translated this piece of code if found :
Code: Select all
; http://www.vbcity.com/forums/topic.asp?tid=16545
;
; Translated into PB by ABBKlaus on 24.1.2006
Declare.s GetLastError()
Declare CheckFileAccess(Filename$,DesiredAccess)
;FileName$="C:\System Volume Information"
FileName$="C:\"
Mask=CheckFileAccess(Filename$,#MAXIMUM_ALLOWED)
If Mask & #FILE_GENERIC_READ
Debug "Access #FILE_GENERIC_READ is granted"
Else
Debug "Access #FILE_GENERIC_READ is not granted"
EndIf
Procedure CheckFileAccess(Filename$,DesiredAccess)
;DesiredAccess can contain
;
;#FILE_GENERIC_READ
;#FILE_GENERIC_WRITE
;#FILE_GENERIC_EXECUTE
;#DELETE
;#WRITE_DAC
;#WRITE_OWNER
;#FILE_ALL_ACCESS
;#MAXIMUM_ALLOWED
#TOKEN_QUERY = $8
#SecurityImpersonation = $3
#OWNER_SECURITY_INFORMATION = $1
#GROUP_SECURITY_INFORMATION = $2
#DACL_SECURITY_INFORMATION = $4
OSVer=OSVersion()
If OSVer=#PB_OS_Windows_95 Or OSVer=#PB_OS_Windows_98 Or OSVer=#PB_OS_Windows_ME
Debug "OS does not support user rights"
EndIf
Result=0
hToken=0
FSFlags=0
Volume$=GetPathPart(FileName$)
GetVolumeInformation_(Volume$,#Null, 0, 0,0,@FSFlags,#Null,0)
If FSFlags & #FS_PERSISTENT_ACLS = 0
Debug "Rights not supported"
ProcedureReturn -1
EndIf
RequestedInformation=#DACL_SECURITY_INFORMATION|#GROUP_SECURITY_INFORMATION|#OWNER_SECURITY_INFORMATION
pSecurityDescriptor.b=0
nLength=0
lpnLengthNeeded=0
Debug "GetFileSecurity("+Filename$+")"
If GetFileSecurity_(@FileName$,RequestedInformation,pSecurityDescriptor,nLength,@lpnLengthNeeded)=0
Debug GetLastError()
*Buf=AllocateMemory(lpnLengthNeeded)
If *Buf>0
If GetFileSecurity_(@FileName$,RequestedInformation,*Buf,lpnLengthNeeded,@lpnLengthNeeded)
Debug "GetFileSecurity Success"
If ImpersonateSelf_(#SecurityImpersonation)
Debug "ImpersonateSelf Success"
Else
Debug "ImpersonateSelf Failed"
EndIf
If OpenThreadToken_(GetCurrentThread_(),#TOKEN_QUERY,0,@hToken)
Debug "OpenThreadToken Success"
Else
Debug "OpenThreadToken Failed"
EndIf
If hToken<>0
GenMap.GENERIC_MAPPING
GenMap\GenericRead = #FILE_GENERIC_READ
GenMap\GenericWrite = #FILE_GENERIC_WRITE
GenMap\GenericExecute = #FILE_GENERIC_EXECUTE
GenMap\GenericAll = #FILE_ALL_ACCESS
MapGenericMask_(@DesiredAccess,GenMap)
PrivSet.PRIVILEGE_SET
Size=SizeOf(PrivSet)
GrantedAccess=0
r=0
If AccessCheck_(*Buf,hToken,DesiredAccess,GenMap,PrivSet.PRIVILEGE_SET,@Size,@GrantedAccess,@r)
Debug "AccessCheck Success"
If GrantedAccess & #FILE_READ_DATA
Debug "#FILE_READ_DATA"
EndIf
If GrantedAccess & #FILE_WRITE_DATA
Debug "#FILE_WRITE_DATA"
EndIf
If GrantedAccess & #FILE_APPEND_DATA
Debug "#FILE_APPEND_DATA"
EndIf
If GrantedAccess & #FILE_READ_EA
Debug "#FILE_READ_EA"
EndIf
If GrantedAccess & #FILE_WRITE_EA
Debug "#FILE_WRITE_EA"
EndIf
If GrantedAccess & #FILE_EXECUTE
Debug "#FILE_EXECUTE"
EndIf
If GrantedAccess & #FILE_DELETE_CHILD
Debug "#FILE_DELETE_CHILD"
EndIf
If GrantedAccess & #FILE_READ_ATTRIBUTES
Debug "#FILE_READ_ATTRIBUTES"
EndIf
If GrantedAccess & #FILE_WRITE_ATTRIBUTES
Debug "#FILE_WRITE_ATTRIBUTES"
EndIf
If (GrantedAccess & #FILE_GENERIC_READ)=#FILE_GENERIC_READ
Debug "#FILE_GENERIC_READ"
EndIf
If (GrantedAccess & #FILE_GENERIC_WRITE)=#FILE_GENERIC_WRITE
Debug "#FILE_GENERIC_WRITE"
EndIf
If (GrantedAccess & #FILE_GENERIC_EXECUTE)=#FILE_GENERIC_EXECUTE
Debug "#FILE_GENERIC_EXECUTE"
EndIf
If (GrantedAccess & #FILE_ALL_ACCESS)=#FILE_ALL_ACCESS
Debug "#FILE_ALL_ACCESS"
EndIf
Result=1
Else
Debug GetLastError()
EndIf
CloseHandle_(hToken)
EndIf
RevertToSelf_()
Else
Debug "GetFileSecurity Failed"
EndIf
FreeMemory(*Buf)
EndIf
EndIf
If Result=1
ProcedureReturn GrantedAccess
Else
ProcedureReturn -1
EndIf
EndProcedure
Procedure.s GetLastError()
err=GetLastError_()
buffer=0
ferr=FormatMessage_(#FORMAT_MESSAGE_ALLOCATE_BUFFER|#FORMAT_MESSAGE_FROM_SYSTEM,0,err,GetUserDefaultLangID_(),@buffer,0,0)
If buffer<>0
errormsg$=PeekS(buffer)
LocalFree_(buffer)
ProcedureReturn RemoveString(errormsg$,Chr(13)+Chr(10))
EndIf
EndProcedure