Example #1
0
void ScanPCI() {
    // формат адресного регистра:
    // ---- ---- BBBB BBBB DDDD DFFF RRRR RR00
    // B - bus, D - device, F - function, R - register
    PutString("# PCI Device List:\n");
    for (unsigned int addr=0; addr<0x01000000; addr+=256) {
        unsigned int id = ReadPCI(addr);
        if ((id & 0xFFFF) != 0xFFFF) {
            unsigned int sub = ReadPCI(addr+0x2C);
            PutString("Addr=");
            PutDWORD(addr);
            PutString(" Vendor=");
            PutWORD(id & 0xFFFF);
            PutString(" ID=");
            PutWORD((id >> 16) & 0xFFFF);
            //PutString(" SubVendor=");
            //PutWORD(sub & 0xFFFF);
            //PutString(" SubID=");
            //PutWORD((sub >> 16) & 0xFFFF);
            /*PutString("\nBAR=");
            for (int i=0; i<6; i++) {
            	WritePCI(addr+0x10+i*4, 0xFFFFFFFF);
            	PutDWORD(ReadPCI(addr+0x10+i*4));
            	PutString(" ");
            }*/
            unsigned int cls = ReadPCI(addr+0x08);
            unsigned int baseClass = (cls >> 24) & 0xFF;
            unsigned int subClass = (cls >> 16) & 0xFF;
            unsigned int iface = (cls >> 8) & 0xFF;
            for (int i=0; i<sizeof(classes)/sizeof(PciDevClass); i++) {
                if (classes[i].baseClass == baseClass && classes[i].subClass == subClass && classes[i].iface == 0xFF) {
                    PutString(" ");
                    PutString(classes[i].name);
                    break;
                }
            }
            //PutBYTE(baseClass);
            //PutBYTE(subClass);
            //PutBYTE(iface);
            PutString("\n");
        }
    }
Example #2
0
void PutDWORD(DWORD dw, LPBYTE& lpb)
{
	PutWORD(LOWORD(dw), lpb);
	PutWORD(HIWORD(dw), lpb);
}
Example #3
0
BOOL CMenuOrder::WriteMenuOrder(LPCSTR sFolderPath)
{
	//sort dir and files by string
	if(len<=0)
		return FALSE;
	try
	{
	index = new int[len];
	}
	catch(...)
	{
//		if(e!=NULL)e->Delete();
		return FALSE;
	}

	int i, j;
	index[0]=0;
	for(i = 1; i<len; i++)
	{
		for(j=i-1; j>=0; j--)
		{
			if(lstrcmpiA(mois[i].longname, mois[index[j]].longname)<0)
			{
				index[j+1]=index[j];
				if(j==0)
					index[j]=i;
			}
			else
			{
				index[j+1]=i;
				break;
			}
		}
	}


	cbsize = 12;
	reserved = 1;
	for(i =0; i<len; i++)
	{
		//calculate length
		if(mois[i].longname!=NULL && mois[i].shortname!=NULL)
			mois[i].cbsize = strlen(mois[i].longname)+1 + strlen(mois[i].shortname)+1;  
		mois[i].cbsize += 22+6;
		cbsize += mois[i].cbsize;
	}

	HKEY hKey;
	BOOL ret = FALSE;
	lpSubKey = MENU_ORDER_KEY;
	lpSubKey += sFolderPath;
	HRESULT hr = RegCreateKeyEx(HKEY_CURRENT_USER, lpSubKey, 0, NULL, 0, KEY_ALL_ACCESS, NULL, &hKey, NULL);
	int slen;

	if(hr == ERROR_SUCCESS)
	{
		LPBYTE lpbuf;
		try
		{
			 lpbuf = new BYTE[cbsize + 8];
		}
		catch(...)
		{
//			if(e!=NULL)e->Delete();
			lpbuf = NULL;
		}
		

		if(lpbuf!=NULL)
		{
			LPBYTE lpt = lpbuf;
			PutDWORD(0x08, lpt);
			PutDWORD(0x02, lpt);
			PutDWORD(cbsize, lpt);
			PutDWORD(reserved, lpt);
			PutDWORD(len, lpt);
			for(j=0; j<len; j++)
			{
				i = index[j];
				if(mois[i].itemtype != 0x31)
					continue;
				PutDWORD(mois[i].cbsize, lpt);
				PutDWORD(mois[i].order, lpt);
				slen = 0;
				if(mois[i].longname!=NULL)
					slen = strlen(mois[i].longname);
				if(mois[i].shortname!=NULL)
					slen += strlen(mois[i].shortname);
				PutWORD(slen+1+1+14, lpt);
				PutWORD(mois[i].itemtype, lpt);
				PutDWORD(mois[i].filesize, lpt);
				PutWORD(mois[i].filedate, lpt);
				PutWORD(mois[i].filetime, lpt);
				PutWORD(mois[i].filetype, lpt);
				PutString(mois[i].longname, lpt);
				PutString(mois[i].shortname, lpt);
				PutWORD((WORD)0, lpt); // end with two 0
				PutDWORD((DWORD)0, lpt); //item end
			}
			for(j=0; j<len; j++)
			{
				i = index[j];
				if(mois[i].itemtype != 0x32)
					continue;
				PutDWORD(mois[i].cbsize, lpt);
				PutDWORD(mois[i].order, lpt);
				slen = 0;
				if(mois[i].longname!=NULL)
					slen = strlen(mois[i].longname);
				if(mois[i].shortname!=NULL)
					slen += strlen(mois[i].shortname);
				PutWORD(slen+1+1+14, lpt);
				PutWORD(mois[i].itemtype, lpt);
				PutDWORD(mois[i].filesize, lpt);
				PutWORD(mois[i].filedate, lpt);
				PutWORD(mois[i].filetime, lpt);
				PutWORD(mois[i].filetype, lpt);
				PutString(mois[i].longname, lpt);
				PutString(mois[i].shortname, lpt);
				PutWORD((WORD)0, lpt); // end with two 0
				PutDWORD((DWORD)0, lpt); //item end
			}

			//save
			RegSetValueEx(hKey, "Order", 0, REG_BINARY, lpbuf, cbsize+8);

			//release
			delete[] lpbuf;

			ret = TRUE;
		}
	}
	RegCloseKey(hKey);

	return ret;
}