>#define VERSION_OF_WINDOWS (eval(ltrim(substr(os(), at(' ', os()))))) >>
>>FUNCTION checkreadrights >>LPARAMETERS cFile >>DECLARE Integer CreateFile IN WIN32API ; >> String lpFilename, ; >> Integer dwDesiredAccess, ; >> Integer dwShareMode, ; >> Integer lpSecurityAttributes_optional, ; >> Integer dwCreateDisposition, ; >> Integer dwFlagsAndAttributes, ; >> Integer hTemplateFile_option >> >>DECLARE INTEGER CloseHandle IN WIN32API ; >> Integer hHandle >> >>DECLARE INTEGER GetLastError IN kernel32.DLL >> >>DECLARE INTEGER FormatMessage IN kernel32.dll INTEGER, STRING, INTEGER, INTEGER, STRING@, INTEGER, STRING >> >>#DEFINE WIN98_DELETE 0x00010000 >>#DEFINE WIN98_WRITE 0x40000000 >> >>#DEFINE FILE_SHARE_DELETE 0X00000004 >>#DEFINE FILE_SHARE_READ 0X00000001 >>#DEFINE FILE_SHARE_WRITE 0X00000002 >>#DEFINE FILE_FLAG_BACKUP_SEMANTICS 0x02000000 >> >>#DEFINE CREATE_NEW 0X00000001 >>#DEFINE CREATE_ALWAYS 0X00000002 >>#DEFINE OPEN_EXISTING 0X00000003 >>#DEFINE OPEN_ALWAYS 0X00000004 >>#DEFINE TRUNCATE_EXISTING 0X00000005 >> >>#DEFINE GENERIC_READ 0x80000000 >> >>LOCAL nHandle, cReturn, lFile[1], nSize >> >>nHandle = CreateFile(cFile, IIF(VAL(OS(3)) < 5, WIN98_DELETE + WIN98_WRITE, GENERIC_READ), ; >> 0, ; >> 0, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0) >> >>IF nHandle <> -1 >> LReturn = .T. >> CloseHandle(nHandle) >>ELSE >> LReturn = .F. >>ENDIF >>RETURN LReturn >>