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"); } }
void PutDWORD(DWORD dw, LPBYTE& lpb) { PutWORD(LOWORD(dw), lpb); PutWORD(HIWORD(dw), lpb); }
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; }