BOOL YGFSMonSaveRegData(UCHAR ucDrive,PCHAR pRegPath,PCHAR pValue,DWORD dwType,UCHAR *pData,DWORD dwDataLen) { char szPath[MAX_PATH],szFile[MAX_PATH]; DWORD hFile,dwAction; REGDATAHEAD RegHead; RegHead.dwType = dwType; RegHead.dwDataLen = dwDataLen; _lstrcpyn(szPath, "C:\\YGReg\\",_lstrlen("C:\\YGReg\\")+1); szPath[0] = ucDrive; YGFSMonConvertRegPath(pRegPath,TRUE); strcat(szPath,pRegPath); if (CreateDirAnsi(szPath)) { strcat(szPath,"\\"); _lstrcpyn(szFile,(pValue&&pValue[0])?pValue:"(default)",_lstrlen((pValue&&pValue[0])?pValue:"(default)")+1); YGFSMonConvertRegPath(szFile,FALSE); strcat(szPath,szFile); if (!R0_OpenCreateFile(FALSE, ACCESS_READWRITE | SHARE_COMPATIBILITY, 0,ACTION_OPENALWAYS, 0, szPath, &hFile,&dwAction)) { R0_WriteFile(FALSE,hFile,sizeof(REGDATAHEAD),0,(UCHAR *)&RegHead,&dwAction); R0_WriteFile(FALSE,hFile,dwDataLen,sizeof(REGDATAHEAD),pData,&dwAction); R0_CloseFile(hFile); } else _asm int 3 } else _asm int 3
/**************************************************************************** REMARKS: VxD implementation of the ANSI C fopen function. ****************************************************************************/ FILE * fopen( const char *filename, const char *mode) { FILE *f = malloc(sizeof(FILE)); long oldpos; if (f) { f->offset = 0; f->text = (mode[1] == 't' || mode[2] == 't'); f->writemode = (mode[0] == 'w') || (mode[0] == 'a'); f->unputc = EOF; f->endp = f->buf + sizeof(f->buf); f->curp = f->startp = f->buf; if (initComplete) { WORD omode,error; BYTE action; if (mode[0] == 'r') { omode = OPEN_ACCESS_READONLY | OPEN_SHARE_COMPATIBLE; action = ACTION_IFEXISTS_OPEN | ACTION_IFNOTEXISTS_FAIL; } else if (mode[0] == 'w') { omode = OPEN_ACCESS_WRITEONLY | OPEN_SHARE_COMPATIBLE; action = ACTION_IFEXISTS_TRUNCATE | ACTION_IFNOTEXISTS_CREATE; } else { omode = OPEN_ACCESS_READWRITE | OPEN_SHARE_COMPATIBLE; action = ACTION_IFEXISTS_OPEN | ACTION_IFNOTEXISTS_CREATE; } f->handle = (int)R0_OpenCreateFile(false,(char*)filename,omode,ATTR_NORMAL,action,0,&error,&action); if (f->handle == 0) { free(f); return NULL; } f->filesize = R0_GetFileSize((HANDLE)f->handle,&error); if (mode[0] == 'a') fseek(f,0,2); } else { int oflag,pmode; if (mode[0] == 'r') { pmode = _S_IREAD; oflag = _O_RDONLY; } else if (mode[0] == 'w') { pmode = _S_IWRITE; oflag = _O_WRONLY | _O_CREAT | _O_TRUNC; } else { pmode = _S_IWRITE; oflag = _O_RDWR | _O_CREAT | _O_APPEND; } if (f->text) oflag |= _O_TEXT; else oflag |= _O_BINARY; if ((f->handle = i_open(filename,oflag,pmode)) == -1) { free(f); return NULL; } oldpos = i_lseek(f->handle,0,1); f->filesize = i_lseek(f->handle,0,2); i_lseek(f->handle,oldpos,0); } } return f; }