⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 inffilehelper.cpp

📁 驱动安装程序
💻 CPP
字号:
// InfFileHelper.cpp: implementation of the CInfFileHelper class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "InfFileHelper.h"

#ifndef DT
	#define DT	DebugTrace
	extern BOOL DebugTrace(const char * lpszFormat,...);
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CInfFileHelper::CInfFileHelper()
{

}

CInfFileHelper::~CInfFileHelper()
{

}

BOOL CInfFileHelper::OpenInfFile(CString szInfFile)
{
	ASSERT(m_file.m_hFile == CFile::hFileNull);

	return m_file.Open(szInfFile,CFile::modeRead | CFile::shareDenyNone);
}


//得到[Manufacturer]段
//格式范例:
//[Manufacturer]
//%Philips%=Philips
//每段必须在同一行
BOOL CInfFileHelper::GetManufacturer(CStringArray& szArrManu)
{
	ASSERT(m_file.m_hFile != CFile::hFileNull);

	szArrManu.RemoveAll();

	BOOL bOK = SeekLine("[Manufacturer]");
	if(!bOK)
		return FALSE;

	CString szLine;
	CString szItem;
	while(m_file.ReadString(szLine))
	{
		szLine.TrimLeft();
		szLine.TrimRight();
		if(szLine.IsEmpty())
			continue;
		if(szLine[0] == ';')
			continue;

		if(szLine.Find('[') != -1)
		{
			szLine.TrimLeft();
			if(szLine[0]!=';')//is comment?
				return bOK;//reached the next section
			else
				continue;
		}
		int nSectionPos = szLine.Find('=');
		if(nSectionPos != -1)
		{
			szItem = szLine.Right(szLine.GetLength() - nSectionPos-1);
			szItem.TrimLeft();
			szItem.TrimRight();
			DT(szItem);

			szArrManu.Add(szItem);
		}
	}
	return bOK;
}

//得到指定szModel下的所有hardware ID
//格式范例:
//[Philips]
//%Cap7134.DeviceFM1216ME%=Cap7134.FM1216ME,PCI\VEN_1131&DEV_7134&SUBSYS_235c1131
//%Cap7134.DeviceFQ1216ME%=Cap7134.FQ1216ME,PCI\VEN_1131&DEV_7134&SUBSYS_235d1131 
//每段必须在同一行

BOOL CInfFileHelper::GetHardwareID(CString szModel, CStringArray &szArrHwID)
{
	ASSERT(m_file.m_hFile != CFile::hFileNull);

	szArrHwID.RemoveAll();

	BOOL bOK = SeekLine("["+szModel+"]");
	if(!bOK)
		return FALSE;

	CString szLine;
	CString szItem;
	while(m_file.ReadString(szLine))
	{
		szLine.TrimLeft();
		szLine.TrimRight();
		if(szLine.IsEmpty())
			continue;
		if(szLine[0] == ';')
			continue;

		if(szLine.Find('[') != -1)
		{
			szLine.TrimLeft();
			if(szLine[0]!=';')//is comment?
				return bOK;//reached the next section
			else
				continue;
		}
		//int nPos = szLine.Find('=');
		int nComma = szLine.Find(',');
		if(nComma != -1)//nPos != -1 && 
		{
			szItem = szLine.Right(szLine.GetLength() - nComma - 1);
			szItem.TrimLeft();
			szItem.TrimRight();
			DT(szItem);

			szArrHwID.Add(szItem);
		}
	}
	return bOK;
}

BOOL CInfFileHelper::SeekLine(CString szLine,UINT uFrom)
{
	ASSERT(uFrom == CFile::begin || CFile::current);
	if(uFrom == CFile::begin)
		m_file.SeekToBegin();
	
	CString szThisLine;

	while(m_file.ReadString(szThisLine))
	{
		if(szThisLine.Find(szLine) != -1)
			return TRUE;
	}
	return FALSE;
}


BOOL CInfFileHelper::MatchHwID(const CStringArray &szArrHwID, CString szHwID)
{
	int nc = szArrHwID.GetSize();

	szHwID.MakeUpper();
	CString szArrItem;

	for(int i=0;i<nc;i++)
	{
		szArrItem = szArrHwID[i];
		szArrItem.MakeUpper();

		if(szHwID.Find(szArrItem) != -1)
		{
			//DT(szHwID);
			//DT(szArrHwID[i]);

			int nLen = szArrItem.GetLength();
			if(szHwID.GetLength() > nLen)
			{
				if(szHwID[nLen] != '&'
					&& szHwID[nLen] != '-'
					&&szHwID[nLen] != '#'
					&&szHwID[nLen] != '_'
					)
					continue;
			}
				
			return TRUE;
		}
	}
	return FALSE;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -