>From [EMAIL PROTECTED] Wed Jan 7 23:39:56 2004
>I'm using NT4preSP7. Adaptec Aspi 4.60 is running. Normally I use ^^^^^^^^^^^^^ Is this the string that is retuned in osver.szCSDVersion? If yes, then there is a big chance that you either got a wrong result from the new function w2kstyle_create() as a result from an illegal memory access or the function w2kstyle_create() just does not correctly know from which NT-4 version the additional flags from NT-5.x need to be used. Now, I need testers! And for the NT4preSP7 case, I need a special test: 1) please insert a test printing line: LOCAL BOOL w2kstyle_create(void) { OSVERSIONINFO osver; /* return FALSE; */ memset(&osver, 0, sizeof (osver)); osver.dwOSVersionInfoSize = sizeof (osver); GetVersionEx(&osver); if (osver.dwPlatformId == VER_PLATFORM_WIN32_NT) { /* * Win2000 is NT-5.0, Win-XP is NT-5.1 */ if (osver.dwMajorVersion > 4) return (TRUE); if (osver.dwMajorVersion == 4) { /* NT-4.x */ char *vers = osver.szCSDVersion; error("osver.szCSDVersion: '%s'\n", vers); sleep(10); if (strlen(vers) == 0) return (FALSE); Because of the sleep(10) you should be able to see the text even if there later is a blue screen. 2) if you still get a blue screen, add a return (FALSE); after the 'error(...' line. 3) If this does not help, try a return (TRUE); Other changes: cdrecord dev=ASPI -scanbus will work. save the mail and run patch < saved-mail /*--------------------------------------------------------------------------*/ Here is a patch that needs to be applied to cdrtools-2.01a24: *** ../cdrecord/cdrtools-2.01/libscg/scsi-wnt.c Mi Jan 7 00:20:32 2004 --- /tmp/scsi-wnt.c So Jan 11 14:39:46 2004 *************** *** 65,72 **** * Choose your name instead of "schily" and make clear that the version * string is related to a modified source. */ ! LOCAL char _scg_trans_version[] = "scsi-wnt.c-1.35"; /* The version for this transport*/ ! LOCAL char _scg_itrans_version[] = "SPTI-scsi-wnt.c-1.35"; /* The version for SPTI */ /* * Local defines and constants --- 65,72 ---- * Choose your name instead of "schily" and make clear that the version * string is related to a modified source. */ ! LOCAL char _scg_trans_version[] = "scsi-wnt.c-1.38"; /* The version for this transport*/ ! LOCAL char _scg_itrans_version[] = "SPTI-scsi-wnt.c-1.38"; /* The version for SPTI */ /* * Local defines and constants *************** *** 110,115 **** --- 110,116 ---- LOCAL void copy_sensedata __PR((SRB_ExecSCSICmd *cp, struct scg_cmd *sp)); LOCAL void set_error __PR((SRB_ExecSCSICmd *cp, struct scg_cmd *sp)); LOCAL BOOL open_driver __PR((SCSI *scgp)); + LOCAL BOOL load_aspi __PR((SCSI *scgp)); LOCAL BOOL close_driver __PR((void)); LOCAL int ha_inquiry __PR((SCSI *scgp, int id, SRB_HAInquiry *ip)); #ifdef __USED__ *************** *** 286,305 **** osver.dwOSVersionInfoSize = sizeof (osver); GetVersionEx(&osver); if (osver.dwPlatformId == VER_PLATFORM_WIN32_NT) { ! if (osver.dwMajorVersion > 4) /* W2k, XP + */ return (TRUE); ! if (osver.dwMajorVersion == 4) { ! if (strlen(osver.szCSDVersion)) { /*if Servicepack installed */ ! int i = 0; ! while (osver.szCSDVersion[i] != '\0' && ! !isdigit(osver.szCSDVersion[i])) ! i++; ! if (isdigit(osver.szCSDVersion[i]) && ! (atoi(&osver.szCSDVersion[i]) >= 4 || isdigit(osver.szCSDVersion[i+1]))) /* Fom Service Pack 4 */ ! return (TRUE); /* same as for W2K */ ! } } } return (FALSE); --- 287,315 ---- osver.dwOSVersionInfoSize = sizeof (osver); GetVersionEx(&osver); if (osver.dwPlatformId == VER_PLATFORM_WIN32_NT) { ! /* ! * Win2000 is NT-5.0, Win-XP is NT-5.1 ! */ ! if (osver.dwMajorVersion > 4) return (TRUE); ! if (osver.dwMajorVersion == 4) { /* NT-4.x */ ! char *vers = osver.szCSDVersion; ! if (strlen(vers) == 0) ! return (FALSE); ! ! /* ! * Servicepack is installed, skip over non-digit part ! */ ! while (*vers != '\0' && !isdigit(*vers)) ! vers++; ! if (*vers == '\0') ! return (FALSE); ! ! if (isdigit(vers) && ! (atoi(vers) >= 4 || isdigit(vers[1]))) /* Fom Service Pack 4 */ ! return (TRUE); /* same as for W2K */ } } return (FALSE); *************** *** 702,714 **** return (-1); } ! if ((device != NULL && *device != '\0' && strcmp(device, "SPTI") != 0 && strcmp(device, "ASPI") != 0) || (busno == -2 && tgt == -2)) { errno = EINVAL; if (scgp->errstr) js_snprintf(scgp->errstr, SCSI_ERRSTR_SIZE, ! "Devname '%s' unknown.", device); return (-1); } if (AspiLoaded <= 0) { /* do not change access method on open driver */ bForceAccess = FALSE; #ifdef PREFER_SPTI --- 712,730 ---- return (-1); } ! if (device != NULL && ! (strcmp(device, "SPTI") == 0 || strcmp(device, "ASPI") == 0) && ! (busno < 0 && tgt < 0 && tlun < 0)) ! goto devok; ! ! if ((device != NULL && *device != '\0') || (busno == -2 && tgt == -2)) { errno = EINVAL; if (scgp->errstr) js_snprintf(scgp->errstr, SCSI_ERRSTR_SIZE, ! "Open by 'devname' not supported on this OS"); return (-1); } + devok: if (AspiLoaded <= 0) { /* do not change access method on open driver */ bForceAccess = FALSE; #ifdef PREFER_SPTI *************** *** 734,739 **** --- 750,761 ---- * This is the non -scanbus case. */ ; + } else if (tgt == -2 && tgt == -2 && + (tgt == -2 || tlun >= 0)) { + /* + * This is the dev=ASPI case. + */ + ; } else if (tgt != -1 || tgt != -1 || tlun != -1) { errno = EINVAL; return (-1); *************** *** 1309,1359 **** if (InitSCSIPT() > 0) AspiLoaded++; #endif #ifdef PREFER_SPTI ! if ((!bUsingSCSIPT || !bForceAccess) && AspiLoaded <= 0) #else ! if (!bUsingSCSIPT || !bForceAccess) #endif ! #ifdef __CYGWIN32__ ! hAspiLib = dlopen("WNASPI32", RTLD_NOW); ! #else ! hAspiLib = LoadLibrary("WNASPI32"); ! #endif ! ! /* ! * Check if ASPI library is loaded correctly ! */ ! if (hAspiLib != NULL) { ! /* ! * Get a pointer to GetASPI32SupportInfo function ! * and a pointer to SendASPI32Command function ! */ ! #ifdef __CYGWIN32__ ! pfnGetASPI32SupportInfo = (DWORD(*)(void))dlsym(hAspiLib, "GetASPI32SupportInfo"); ! pfnSendASPI32Command = (DWORD(*)(LPSRB))dlsym(hAspiLib, "SendASPI32Command"); ! #else ! pfnGetASPI32SupportInfo = (DWORD(*)(void))GetProcAddress(hAspiLib, "GetASPI32SupportInfo"); ! pfnSendASPI32Command = (DWORD(*)(LPSRB))GetProcAddress(hAspiLib, "SendASPI32Command"); ! #endif ! ! if ((pfnGetASPI32SupportInfo == NULL) || (pfnSendASPI32Command == NULL)) { ! js_fprintf((FILE *)scgp->errfile, ! "ASPI function not found in library!"); ! return (FALSE); } - #ifdef __CYGWIN32__ - pfnGetASPI32Buffer = (BOOL(*)(PASPI32BUFF))dlsym(hAspiLib, "GetASPI32Buffer"); - pfnFreeASPI32Buffer = (BOOL(*)(PASPI32BUFF))dlsym(hAspiLib, "FreeASPI32Buffer"); - pfnTranslateASPI32Address = (BOOL(*)(PDWORD, PDWORD))dlsym(hAspiLib, "TranslateASPI32Address"); - #else - pfnGetASPI32Buffer = (BOOL(*)(PASPI32BUFF))GetProcAddress(hAspiLib, "GetASPI32Buffer"); - pfnFreeASPI32Buffer = (BOOL(*)(PASPI32BUFF))GetProcAddress(hAspiLib, "FreeASPI32Buffer"); - pfnTranslateASPI32Address = (BOOL(*)(PDWORD, PDWORD))GetProcAddress(hAspiLib, "TranslateASPI32Address"); - #endif - AspiLoaded++; - bUsingSCSIPT = FALSE; - } - #ifndef PREFER_SPTI if ((bUsingSCSIPT || !bForceAccess) && AspiLoaded <= 0) if (InitSCSIPT() > 0) --- 1331,1346 ---- if (InitSCSIPT() > 0) AspiLoaded++; #endif #ifdef PREFER_SPTI ! if ((!bUsingSCSIPT || !bForceAccess) && AspiLoaded <= 0) { #else ! if (!bUsingSCSIPT || !bForceAccess) { #endif ! if (load_aspi(scgp)) { ! AspiLoaded++; ! bUsingSCSIPT = FALSE; ! } } #ifndef PREFER_SPTI if ((bUsingSCSIPT || !bForceAccess) && AspiLoaded <= 0) if (InitSCSIPT() > 0) *************** *** 1414,1420 **** --- 1401,1460 ---- return (TRUE); } + LOCAL BOOL + load_aspi(scgp) + SCSI *scgp; + { + #ifdef __CYGWIN32__ + hAspiLib = dlopen("WNASPI32", RTLD_NOW); + #else + hAspiLib = LoadLibrary("WNASPI32"); + #endif + /* + * Check if ASPI library is loaded correctly + */ + if (hAspiLib == NULL) { + #ifdef not_done_later + js_fprintf((FILE *)scgp->errfile, "Can not load ASPI driver! "); + #endif + return (FALSE); + } + /* + * Get a pointer to GetASPI32SupportInfo function + * and a pointer to SendASPI32Command function + */ + #ifdef __CYGWIN32__ + pfnGetASPI32SupportInfo = (DWORD(*)(void))dlsym(hAspiLib, "GetASPI32SupportInfo"); + pfnSendASPI32Command = (DWORD(*)(LPSRB))dlsym(hAspiLib, "SendASPI32Command"); + #else + pfnGetASPI32SupportInfo = (DWORD(*)(void))GetProcAddress(hAspiLib, "GetASPI32SupportInfo"); + pfnSendASPI32Command = (DWORD(*)(LPSRB))GetProcAddress(hAspiLib, "SendASPI32Command"); + #endif + + if ((pfnGetASPI32SupportInfo == NULL) || (pfnSendASPI32Command == NULL)) { + js_fprintf((FILE *)scgp->errfile, + "ASPI function not found in library! "); + return (FALSE); + } + + /* + * The following functions are currently not used by libscg. + * If we start to use them, we need to check whether the founctions + * could be found in the ASPI library that just has been loaded. + */ + #ifdef __CYGWIN32__ + pfnGetASPI32Buffer = (BOOL(*)(PASPI32BUFF))dlsym(hAspiLib, "GetASPI32Buffer"); + pfnFreeASPI32Buffer = (BOOL(*)(PASPI32BUFF))dlsym(hAspiLib, "FreeASPI32Buffer"); + pfnTranslateASPI32Address = (BOOL(*)(PDWORD, PDWORD))dlsym(hAspiLib, "TranslateASPI32Address"); + #else + pfnGetASPI32Buffer = (BOOL(*)(PASPI32BUFF))GetProcAddress(hAspiLib, "GetASPI32Buffer"); + pfnFreeASPI32Buffer = (BOOL(*)(PASPI32BUFF))GetProcAddress(hAspiLib, "FreeASPI32Buffer"); + pfnTranslateASPI32Address = (BOOL(*)(PDWORD, PDWORD))GetProcAddress(hAspiLib, "TranslateASPI32Address"); + #endif + return (TRUE); + } + /*************************************************************************** * * * BOOL close_driver() * Jörg -- EMail:[EMAIL PROTECTED] (home) Jörg Schilling D-13353 Berlin [EMAIL PROTECTED] (uni) If you don't have iso-8859-1 [EMAIL PROTECTED] (work) chars I am J"org Schilling URL: http://www.fokus.fraunhofer.de/usr/schilling ftp://ftp.berlios.de/pub/schily -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]