void GPSSensorUBX::AppendCheckSum(UBXMsg *msg) { unsigned char chA; unsigned char chB; unsigned char *buff = (unsigned char*)(&(msg->hdr)); int len = (msg->hdr.length)+4; //DBG_MEMDUMP("Before CS",(char*)msg,len+2); ComputeCheckSum(buff,len,&chA,&chB); buff[len] = chA; buff[len+1] = chB; //DBG_MEMDUMP("AFTER CS",(char*)msg,len+4); }
void Header::Init(size_t size, const char* file_name, unsigned int line_num) { m_iSize = size; m_sFileName = file_name; m_iLineNumber = line_num; m_pAddress = (this+1); m_pBlockNode = NULL; m_iCkeckSum = ComputeCheckSum(); }
CString ConnectionLimit::WriteConnections(DWORD conns) { PVOID oldValue = NULL; TCHAR windir[MAX_PATH]; GetWindowsDirectory(windir, MAX_PATH); CString patchedFiles; for(int i=0; i<3; ++i) { CString path(windir); switch(i) { case 0: path+=DIR_LOC; break; case 1: path+=DIR_LOC_1; break; case 2: path+=DIR_LOC_2; break; } int id = GetBuildID(path); CFile file; DWORD dwOffset = 0; dwOffset = GetOffset(path); bool wasPatched = true; if(IsWow64()) { MyWow64DisableWow64FsRedirection(&oldValue); } if(file.Open(path,CFile::modeReadWrite)) { if(IsWow64()) { MyWow64RevertWow64FsRedirection(oldValue); } if(dwOffset) { file.Seek(dwOffset,CFile::begin); file.Write(&conns, sizeof(conns)); file.Close(); DWORD checkSum = ComputeCheckSum(path); patchedFiles+=path; patchedFiles+="\n"; } } int err = GetLastError(); } return patchedFiles; }
bool ConnectionLimit::PatchVista() { PVOID oldValue = NULL; TCHAR windir[MAX_PATH]; GetWindowsDirectory(windir, MAX_PATH); CString path(windir); path+=DIR_LOC; int id = GetBuildID(path); if(id != 16384) return false; CFile file; DWORD dwOffset = 0; dwOffset = GetOffset(path); if(IsWow64()) { MyWow64DisableWow64FsRedirection(&oldValue); } if(!file.Open(path,CFile::modeReadWrite)) { //unlock file if not alredy unlocked UnlockFile(path); } else { file.Close(); } if(file.Open(path,CFile::modeReadWrite)) { if(IsWow64()) { MyWow64RevertWow64FsRedirection(oldValue); } if(dwOffset) { file.Seek(dwOffset,CFile::begin); TCHAR num = 0x90; for(int i = 0; i<6; ++i) { file.Write(&num,sizeof(num)); } file.Close(); DWORD checkSum = ComputeCheckSum(path); return true; } } return false; }
VOID HalpInitMpInfo ( IN struct PcMpTable *MpTablePtr ) /*++ Routine Description: This routine initializes a HAL specific data structure that is used by the HAL to simplify access to MP information. Arguments: MpTablePtr: Pointer to the MPS table. Return Value: Pointer to the HAL MP information table. */ { PUCHAR TraversePtr; UCHAR CheckSum; // Walk the MPS table. The HAL MP information structure has // pointers to the first entry for each entry type in the MPS // table. Set these pointers. TraversePtr = (PUCHAR) MpTablePtr + HEADER_SIZE; HalpMpInfoTable.ProcessorEntryPtr = (PPCMPPROCESSOR) TraversePtr; HalpMpInfoTable.ApicVersion = (ULONG) (HalpMpInfoTable.ProcessorEntryPtr[0].LocalApicVersion & 0xf0); while(((PPCMPPROCESSOR)(TraversePtr))->EntryType == ENTRY_PROCESSOR) { if(((PPCMPPROCESSOR)(TraversePtr))->CpuFlags & CPU_ENABLED) { HalpMpInfoTable.ProcessorCount += 1; } TraversePtr += sizeof(PCMPPROCESSOR); } HalpMpInfoTable.BusEntryPtr = (PPCMPBUS) TraversePtr; while(((PPCMPBUS)(TraversePtr))->EntryType == ENTRY_BUS) { HalpMpInfoTable.BusCount += 1; TraversePtr += sizeof(PCMPBUS); } HalpMpInfoTable.IoApicEntryPtr = (PPCMPIOAPIC) TraversePtr; while(((PPCMPIOAPIC)(TraversePtr))->EntryType == ENTRY_IOAPIC) { if(((PPCMPIOAPIC)(TraversePtr))->IoApicFlag & IO_APIC_ENABLED) { HalpMpInfoTable.IOApicCount += 1; } TraversePtr += sizeof(PCMPIOAPIC); } if (UserSpecifiedNoIoApic) { HalpMpInfoTable.IOApicCount = 0; } HalpMpInfoTable.IntiEntryPtr = (PPCMPINTI) TraversePtr; while(((PPCMPINTI)(TraversePtr))->EntryType == ENTRY_INTI) { HalpMpInfoTable.IntiCount += 1; TraversePtr += sizeof(PCMPINTI); } HalpMpInfoTable.LintiEntryPtr = (PPCMPLINTI) TraversePtr; while(((PPCMPLINTI)(TraversePtr))->EntryType == ENTRY_LINTI) { HalpMpInfoTable.LintiCount += 1; TraversePtr += sizeof(PCMPLINTI); } // // Check for Extension table defined // if (MpTablePtr->ExtTableLength && MpTablePtr->TableLength + MpTablePtr->ExtTableLength < 8192) { CheckSum = ComputeCheckSum( (PUCHAR) MpTablePtr + MpTablePtr->TableLength, MpTablePtr->ExtTableLength ); CheckSum += MpTablePtr->ExtTableChecksum; if (CheckSum != 0) { DBGMSG("HALMPS: InitMpInfo: Extension table checksum error\n"); } else { HalpMpInfoTable.ExtensionTable = (PMPS_EXTENTRY) (((PUCHAR) MpTablePtr) + MpTablePtr->TableLength); HalpMpInfoTable.EndOfExtensionTable = (PMPS_EXTENTRY) (((PUCHAR) MpTablePtr) + MpTablePtr->TableLength + MpTablePtr->ExtTableLength); } } return; }
bool Header::CheckSum() const { return (m_iCkeckSum == ComputeCheckSum()); }