Exemple #1
0
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
Exemple #2
0
/****************************************************************************
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;
}