2008-07-08 16:47 UTC+0200 Viktor Szakats (harbour.01 syenar hu)
* contrib/hbw32/Makefile
* contrib/hbw32/common.mak
+ contrib/hbw32/w32_osc.c
+ contrib/hbw32/w32_os.prg
+ Ported some Windows specific version detection and
networking checker/setup code. From Peter Rees/xhb:
OS_ISWINNT()
OS_ISWINNT351()
OS_ISWINNT4()
OS_ISWIN2000_OR_LATER()
OS_ISWIN2000()
OS_ISWINXP()
OS_ISWIN2003()
OS_ISWINVISTA()
OS_ISWIN9X()
OS_ISWIN95()
OS_ISWIN98()
OS_ISWINME()
OS_ISWTSCLIENT()
OS_VERSIONINFO()
OS_NETREGOK()
OS_NETVREDIROK()
This commit is contained in:
@@ -8,6 +8,30 @@
|
||||
2008-12-31 13:59 UTC+0100 Foo Bar <foo.bar@foobar.org>
|
||||
*/
|
||||
|
||||
2008-07-08 16:47 UTC+0200 Viktor Szakats (harbour.01 syenar hu)
|
||||
* contrib/hbw32/Makefile
|
||||
* contrib/hbw32/common.mak
|
||||
+ contrib/hbw32/w32_osc.c
|
||||
+ contrib/hbw32/w32_os.prg
|
||||
+ Ported some Windows specific version detection and
|
||||
networking checker/setup code. From Peter Rees/xhb:
|
||||
OS_ISWINNT()
|
||||
OS_ISWINNT351()
|
||||
OS_ISWINNT4()
|
||||
OS_ISWIN2000_OR_LATER()
|
||||
OS_ISWIN2000()
|
||||
OS_ISWINXP()
|
||||
OS_ISWIN2003()
|
||||
OS_ISWINVISTA()
|
||||
OS_ISWIN9X()
|
||||
OS_ISWIN95()
|
||||
OS_ISWIN98()
|
||||
OS_ISWINME()
|
||||
OS_ISWTSCLIENT()
|
||||
OS_VERSIONINFO()
|
||||
OS_NETREGOK()
|
||||
OS_NETVREDIROK()
|
||||
|
||||
2008-07-08 14:13 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
||||
* harbour/include/hbrddcdx.h
|
||||
* harbour/source/rdd/dbfcdx/dbfcdx1.c
|
||||
|
||||
@@ -12,13 +12,15 @@ C_SOURCES=\
|
||||
dllcall.c \
|
||||
tprinter.c \
|
||||
w32_ole.c \
|
||||
w32_osc.c \
|
||||
w32_prn.c \
|
||||
w32_regc.c \
|
||||
|
||||
PRG_SOURCES=\
|
||||
w32_os.prg \
|
||||
w32_reg.prg \
|
||||
w32_tole.prg \
|
||||
w32_tprn.prg \
|
||||
w32_reg.prg \
|
||||
|
||||
PRG_HEADERS = \
|
||||
hbw32.ch \
|
||||
|
||||
@@ -13,12 +13,14 @@ LIB_OBJS = \
|
||||
$(OBJ_DIR)dllcall$(OBJEXT) \
|
||||
$(OBJ_DIR)tprinter$(OBJEXT) \
|
||||
$(OBJ_DIR)w32_ole$(OBJEXT) \
|
||||
$(OBJ_DIR)w32_osc$(OBJEXT) \
|
||||
$(OBJ_DIR)w32_prn$(OBJEXT) \
|
||||
$(OBJ_DIR)w32_regc$(OBJEXT) \
|
||||
\
|
||||
$(OBJ_DIR)w32_os$(OBJEXT) \
|
||||
$(OBJ_DIR)w32_reg$(OBJEXT) \
|
||||
$(OBJ_DIR)w32_tole$(OBJEXT) \
|
||||
$(OBJ_DIR)w32_tprn$(OBJEXT) \
|
||||
$(OBJ_DIR)w32_reg$(OBJEXT) \
|
||||
|
||||
all: \
|
||||
$(LIB_PATH) \
|
||||
|
||||
131
harbour/contrib/hbw32/w32_os.prg
Normal file
131
harbour/contrib/hbw32/w32_os.prg
Normal file
@@ -0,0 +1,131 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Harbour Project source code:
|
||||
*
|
||||
* Copyright 2004 Peter Rees <peter@rees.co.nz>
|
||||
* Rees Software & Systems Ltd
|
||||
*
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2, or (at your option )
|
||||
* any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this software; see the file COPYING. If not, write to
|
||||
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
||||
* Boston, MA 02111-1307 USA (or visit the web site http://www.gnu.org/ ).
|
||||
*
|
||||
* As a special exception, the Harbour Project gives permission for
|
||||
* additional uses of the text contained in its release of Harbour.
|
||||
*
|
||||
* The exception is that, if you link the Harbour libraries with other
|
||||
* files to produce an executable, this does not by itself cause the
|
||||
* resulting executable to be covered by the GNU General Public License.
|
||||
* Your use of that executable is in no way restricted on account of
|
||||
* linking the Harbour library code into it.
|
||||
*
|
||||
* This exception does not however invalidate any other reasons why
|
||||
* the executable file might be covered by the GNU General Public License.
|
||||
*
|
||||
* This exception applies only to the code released by the Harbour
|
||||
* Project under the name Harbour. If you copy code from other
|
||||
* Harbour Project or Free Software Foundation releases into a copy of
|
||||
* Harbour, as the General Public License permits, the exception does
|
||||
* not apply to the code that you add in this way. To avoid misleading
|
||||
* anyone as to the status of such modified files, you must delete
|
||||
* this exception notice from them.
|
||||
*
|
||||
* If you write modifications of your own for Harbour, it is your choice
|
||||
* whether to permit this exception to apply to your modifications.
|
||||
* If you do not wish that, delete this exception notice.
|
||||
|
||||
*/
|
||||
|
||||
/*
|
||||
* Operating system functions for Win32
|
||||
*
|
||||
* Program to check and set Windows Registry settings
|
||||
* for safe networking - all versions of Windows to XP SP2
|
||||
*
|
||||
* Also includes check for buggy VREDIR.VXD under Win95
|
||||
* and if the correct patch file is found - run it.
|
||||
*/
|
||||
|
||||
#include "common.ch"
|
||||
#include "directry.ch"
|
||||
#include "hbw32.ch"
|
||||
|
||||
/* NOTE: To change any of these registry settings
|
||||
Administrator rights are required by default in Windows. [vszakats] */
|
||||
|
||||
FUNCTION OS_NETREGOK( lSetIt, lDoVista )
|
||||
LOCAL rVal := .T.
|
||||
LOCAL cKeySrv
|
||||
LOCAL cKeyWks
|
||||
|
||||
DEFAULT lSetIt TO .F.
|
||||
DEFAULT lDoVista TO .T.
|
||||
|
||||
IF !lDoVista .AND. OS_ISWINVISTA()
|
||||
*
|
||||
ELSEIF OS_ISWIN9X()
|
||||
rVal := QueryRegistry( HKEY_LOCAL_MACHINE, "System\CurrentControlSet\Services\VxD\VREDIR", "DiscardCacheOnOpen", 1, lSetIt )
|
||||
ELSE
|
||||
cKeySrv := "System\CurrentControlSet\Services\LanmanServer\Parameters"
|
||||
cKeyWks := "System\CurrentControlSet\Services\LanmanWorkStation\Parameters"
|
||||
|
||||
/* Server settings */
|
||||
rVal := rVal .AND. QueryRegistry( HKEY_LOCAL_MACHINE, cKeySrv, "CachedOpenLimit", 0, lSetIt )
|
||||
rVal := rVal .AND. QueryRegistry( HKEY_LOCAL_MACHINE, cKeySrv, "EnableOpLocks", 0, lSetIt ) /* Q124916 */
|
||||
rVal := rVal .AND. QueryRegistry( HKEY_LOCAL_MACHINE, cKeySrv, "EnableOpLockForceClose", 1, lSetIt )
|
||||
rVal := rVal .AND. QueryRegistry( HKEY_LOCAL_MACHINE, cKeySrv, "SharingViolationDelay", 0, lSetIt )
|
||||
rVal := rVal .AND. QueryRegistry( HKEY_LOCAL_MACHINE, cKeySrv, "SharingViolationRetries", 0, lSetIt )
|
||||
|
||||
/* Workstation settings */
|
||||
rVal := rVal .AND. QueryRegistry( HKEY_LOCAL_MACHINE, cKeyWks, "UseOpportunisticLocking", 0, lSetIt )
|
||||
rVal := rVal .AND. QueryRegistry( HKEY_LOCAL_MACHINE, cKeyWks, "EnableOpLocks", 0, lSetIt )
|
||||
rVal := rVal .AND. QueryRegistry( HKEY_LOCAL_MACHINE, cKeyWks, "EnableOpLockForceClose", 1, lSetIt )
|
||||
rVal := rVal .AND. QueryRegistry( HKEY_LOCAL_MACHINE, cKeyWks, "UtilizeNtCaching", 0, lSetIt )
|
||||
rVal := rVal .AND. QueryRegistry( HKEY_LOCAL_MACHINE, cKeyWks, "UseLockReadUnlock", 0, lSetIt )
|
||||
|
||||
IF OS_ISWIN2000_OR_LATER()
|
||||
rVal := rVal .AND. QueryRegistry( HKEY_LOCAL_MACHINE, "System\CurrentControlSet\Services\MRXSmb\Parameters", "OpLocksDisabled", 1, lSetIt )
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
RETURN rVal
|
||||
|
||||
FUNCTION OS_NETVREDIROK( nResult )
|
||||
LOCAL cWinDir
|
||||
LOCAL cFile
|
||||
LOCAL a
|
||||
|
||||
nResult := 0
|
||||
|
||||
IF OS_ISWIN9X()
|
||||
cWinDir := GETENV( "WINDIR" ) /* Get the folder that Windows is installed in */
|
||||
IF EMPTY( cWinDir )
|
||||
cWinDir := "C:\WINDOWS"
|
||||
ENDIF
|
||||
cFile := cWinDir + "\SYSTEM\VREDIR.VXD"
|
||||
a := DIRECTORY( cFile ) /* Check for faulty files. */
|
||||
IF !EMPTY( a )
|
||||
IF a[ 1, F_SIZE ] == 156749 .AND. a[ 1, F_TIME ] == "11:11:10"
|
||||
nResult := 1111
|
||||
ELSEIF a[ 1, F_SIZE ] == 140343 .AND. a[ 1, F_TIME ] == "09:50:00"
|
||||
nResult := 950
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
RETURN EMPTY( nResult )
|
||||
193
harbour/contrib/hbw32/w32_osc.c
Normal file
193
harbour/contrib/hbw32/w32_osc.c
Normal file
@@ -0,0 +1,193 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Harbour Project source code:
|
||||
*
|
||||
* Copyright 2004 Peter Rees <peter@rees.co.nz>
|
||||
* Rees Software & Systems Ltd
|
||||
*
|
||||
* www - http://www.harbour-project.org
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2, or (at your option )
|
||||
* any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this software; see the file COPYING. If not, write to
|
||||
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
||||
* Boston, MA 02111-1307 USA (or visit the web site http://www.gnu.org/ ).
|
||||
*
|
||||
* As a special exception, the Harbour Project gives permission for
|
||||
* additional uses of the text contained in its release of Harbour.
|
||||
*
|
||||
* The exception is that, if you link the Harbour libraries with other
|
||||
* files to produce an executable, this does not by itself cause the
|
||||
* resulting executable to be covered by the GNU General Public License.
|
||||
* Your use of that executable is in no way restricted on account of
|
||||
* linking the Harbour library code into it.
|
||||
*
|
||||
* This exception does not however invalidate any other reasons why
|
||||
* the executable file might be covered by the GNU General Public License.
|
||||
*
|
||||
* This exception applies only to the code released by the Harbour
|
||||
* Project under the name Harbour. If you copy code from other
|
||||
* Harbour Project or Free Software Foundation releases into a copy of
|
||||
* Harbour, as the General Public License permits, the exception does
|
||||
* not apply to the code that you add in this way. To avoid misleading
|
||||
* anyone as to the status of such modified files, you must delete
|
||||
* this exception notice from them.
|
||||
*
|
||||
* If you write modifications of your own for Harbour, it is your choice
|
||||
* whether to permit this exception to apply to your modifications.
|
||||
* If you do not wish that, delete this exception notice.
|
||||
|
||||
*/
|
||||
|
||||
/*
|
||||
* Operating system functions for Win32
|
||||
*
|
||||
* Program to check and set Windows Registry settings
|
||||
* for safe networking - all versions of Windows to XP SP2
|
||||
*
|
||||
*
|
||||
* Also includes check for buggy VREDIR.VXD under Win95
|
||||
* and if the correct patch file is found - run it.
|
||||
*/
|
||||
|
||||
#define HB_OS_WIN_32_USED
|
||||
|
||||
#include "hbapiitm.h"
|
||||
|
||||
static void getwinver( OSVERSIONINFO * pOSvi )
|
||||
{
|
||||
pOSvi->dwOSVersionInfoSize = sizeof( OSVERSIONINFO );
|
||||
GetVersionEx( pOSvi );
|
||||
}
|
||||
|
||||
HB_FUNC( OS_ISWINNT )
|
||||
{
|
||||
OSVERSIONINFO osvi;
|
||||
getwinver( &osvi );
|
||||
hb_retl( osvi.dwPlatformId == VER_PLATFORM_WIN32_NT );
|
||||
}
|
||||
|
||||
HB_FUNC( OS_ISWINNT351 )
|
||||
{
|
||||
OSVERSIONINFO osvi;
|
||||
getwinver( &osvi );
|
||||
hb_retl( osvi.dwPlatformId == VER_PLATFORM_WIN32_NT
|
||||
&& osvi.dwMajorVersion == 3 && osvi.dwMinorVersion == 51 );
|
||||
}
|
||||
|
||||
HB_FUNC( OS_ISWINNT4 )
|
||||
{
|
||||
OSVERSIONINFO osvi;
|
||||
getwinver( &osvi );
|
||||
hb_retl( osvi.dwPlatformId == VER_PLATFORM_WIN32_NT
|
||||
&& osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0 );
|
||||
}
|
||||
|
||||
HB_FUNC( OS_ISWIN2000_OR_LATER )
|
||||
{
|
||||
OSVERSIONINFO osvi;
|
||||
getwinver( &osvi );
|
||||
hb_retl( osvi.dwMajorVersion >= 5 );
|
||||
}
|
||||
|
||||
HB_FUNC( OS_ISWIN2000 )
|
||||
{
|
||||
OSVERSIONINFO osvi;
|
||||
getwinver( &osvi );
|
||||
hb_retl( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0 );
|
||||
}
|
||||
|
||||
HB_FUNC( OS_ISWINXP )
|
||||
{
|
||||
OSVERSIONINFO osvi;
|
||||
getwinver( &osvi );
|
||||
hb_retl( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1 );
|
||||
}
|
||||
|
||||
HB_FUNC( OS_ISWIN2003 )
|
||||
{
|
||||
OSVERSIONINFO osvi;
|
||||
getwinver( &osvi );
|
||||
hb_retl( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2 );
|
||||
}
|
||||
|
||||
HB_FUNC( OS_ISWINVISTA )
|
||||
{
|
||||
OSVERSIONINFO osvi;
|
||||
getwinver( &osvi );
|
||||
hb_retl( osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 0 );
|
||||
}
|
||||
|
||||
HB_FUNC( OS_ISWIN9X )
|
||||
{
|
||||
OSVERSIONINFO osvi;
|
||||
getwinver( &osvi );
|
||||
hb_retl( osvi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS );
|
||||
}
|
||||
|
||||
HB_FUNC( OS_ISWIN95 )
|
||||
{
|
||||
OSVERSIONINFO osvi;
|
||||
getwinver( &osvi );
|
||||
hb_retl( osvi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS
|
||||
&& osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0 );
|
||||
}
|
||||
|
||||
HB_FUNC( OS_ISWIN98 )
|
||||
{
|
||||
OSVERSIONINFO osvi;
|
||||
getwinver( &osvi );
|
||||
hb_retl( osvi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS
|
||||
&& osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 10 );
|
||||
}
|
||||
|
||||
HB_FUNC( OS_ISWINME )
|
||||
{
|
||||
OSVERSIONINFO osvi;
|
||||
getwinver( &osvi );
|
||||
hb_retl( osvi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS
|
||||
&& osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 90 );
|
||||
}
|
||||
|
||||
HB_FUNC( OS_ISWTSCLIENT )
|
||||
{
|
||||
BOOL iResult = FALSE;
|
||||
OSVERSIONINFO osvi;
|
||||
getwinver( &osvi );
|
||||
if( osvi.dwPlatformId == VER_PLATFORM_WIN32_NT && osvi.dwMajorVersion >= 4 )
|
||||
{
|
||||
/* Only supported on NT 4.0 SP3 & higher */
|
||||
#ifndef SM_REMOTESESSION
|
||||
#define SM_REMOTESESSION 0x1000
|
||||
#endif
|
||||
iResult = GetSystemMetrics( SM_REMOTESESSION ) != 0;
|
||||
}
|
||||
hb_retl( iResult );
|
||||
}
|
||||
|
||||
HB_FUNC( OS_VERSIONINFO )
|
||||
{
|
||||
PHB_ITEM pArray = hb_itemArrayNew( 5 );
|
||||
OSVERSIONINFO osvi;
|
||||
getwinver( &osvi );
|
||||
hb_arraySetNL( pArray, 1, osvi.dwMajorVersion );
|
||||
hb_arraySetNL( pArray, 2, osvi.dwMinorVersion );
|
||||
if( osvi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS )
|
||||
osvi.dwBuildNumber = LOWORD( osvi.dwBuildNumber );
|
||||
hb_arraySetNL( pArray, 3, osvi.dwBuildNumber );
|
||||
hb_arraySetNL( pArray, 4, osvi.dwPlatformId );
|
||||
hb_arraySetC( pArray, 5, osvi.szCSDVersion );
|
||||
hb_itemReturnRelease( pArray );
|
||||
}
|
||||
Reference in New Issue
Block a user