#include "precomp.h" #pragma hdrstop // // x86 version (that deals with boot.ini) as opposed to arc // version, that dceals with nvram (that routine is in the portable directory). // #ifdef _X86_ BOOL FChangeBootIniTimeout( IN INT Timeout ) { CHP BOOTINI[] = "C:\\boot.ini"; HFILE hfile; ULONG FileSize; PUCHAR buf = NULL,p1,p2; BOOL b; CHAR TimeoutLine[256]; sprintf(TimeoutLine,"timeout=%u\r\n",Timeout); // // Open and read boot.ini. // b = FALSE; hfile = _lopen(BOOTINI,OF_READ); if(hfile != HFILE_ERROR) { FileSize = _llseek(hfile,0,2); if(FileSize != (ULONG)(-1)) { if((_llseek(hfile,0,0) != -1) && (buf = SAlloc(FileSize+1)) && (_lread(hfile,buf,FileSize) != (UINT)(-1))) { buf[FileSize] = 0; b = TRUE; } } _lclose(hfile); } if(!b) { if(buf) { SFree(buf); } return(FALSE); } if(!(p1 = strstr(buf,"timeout"))) { SFree(buf); return(FALSE); } if(p2 = strchr(p1,'\n')) { p2++; // skip NL. } else { p2 = buf + FileSize; } SetFileAttributes(BOOTINI,FILE_ATTRIBUTE_NORMAL); hfile = _lcreat(BOOTINI,0); if(hfile == HFILE_ERROR) { SFree(buf); return(FALSE); } // // Write: // // 1) the first part, start=buf, len=p1-buf // 2) the timeout line // 3) the last part, start=p2, len=buf+FileSize-p2 // b = ((_lwrite(hfile,buf ,p1-buf ) != (UINT)(-1)) && (_lwrite(hfile,TimeoutLine,strlen(TimeoutLine)) != (UINT)(-1)) && (_lwrite(hfile,p2 ,buf+FileSize-p2 ) != (UINT)(-1))); _lclose(hfile); SFree(buf); // // Make boot.ini archive, read only, and system. // SetFileAttributes( BOOTINI, FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_ARCHIVE ); return(b); } #endif