Advertisement
Guest User

Untitled

a guest
Sep 23rd, 2017
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.14 KB | None | 0 0
  1. // xmlfix.cpp : Defines the entry point for the console application.
  2. //
  3.  
  4. #include "stdafx.h"
  5.  
  6.  
  7. int _tmain(int argc, _TCHAR* argv[])
  8. {
  9.     HANDLE hFile;
  10.     DWORD size;
  11.     DWORD filedata, filedatafixed;
  12.     DWORD origfiledata, origfiledatafixed;
  13.     DWORD bytesWritten, BytesRead;
  14.     DWORD patternaddr;
  15.     char countrycode[4];
  16.  
  17.     char pattern1[] = " CountryOrigin=\x22";
  18.     char pattern2[] = "</SerialNo>";
  19.  
  20.     if (argc != 2) {
  21.         printf("Ni vhodnih parametrov!\n");
  22.         return -1;
  23.     }
  24.     countrycode[0] = '-';
  25.  
  26.     hFile = CreateFile(argv[1], GENERIC_READ | GENERIC_WRITE, NULL, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
  27.     if (hFile == INVALID_HANDLE_VALUE) {
  28.         printf("Odpiranje datoteke ni uspelo!\n");
  29.         return -1;
  30.     }
  31.  
  32.     size = GetFileSize(hFile, NULL);
  33.     size += 10;
  34.    
  35.     filedata = (DWORD)VirtualAlloc(0, (SIZE_T)size, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
  36.     filedatafixed = (DWORD)VirtualAlloc(0, (SIZE_T)(size+(size/4)), MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
  37.    
  38.     origfiledata = filedata;
  39.     origfiledatafixed = filedatafixed;
  40.    
  41.     if(!(ReadFile(hFile, (DWORD*)filedata, size, &BytesRead, 0))) {
  42.         printf("Branje datoteke neuspešno!\n");
  43.         return -1;
  44.     }
  45.     while(1)
  46.     {
  47.         patternaddr = (DWORD)StrStr((LPSTR)filedata, pattern1);
  48.         if (!patternaddr) {
  49.             StringCbCat(STRSAFE_LPSTR(filedatafixed), (size+(size/2)), (STRSAFE_LPCSTR)filedata);
  50.             break;
  51.         }
  52.         StringCbCopy(countrycode+1, 3, STRSAFE_LPCSTR(patternaddr+(sizeof(pattern1)-1)));
  53.         patternaddr = (DWORD)StrStr((LPSTR)patternaddr, pattern2);
  54.         StringCbCopy(STRSAFE_LPSTR(filedatafixed+(strlen((char*)filedatafixed))), (patternaddr-filedata)+1, STRSAFE_LPCSTR(filedata)); 
  55.  
  56.         if (StrCmpN((LPCSTR)(patternaddr-3), countrycode, 3)) {
  57.             StringCbCat(STRSAFE_LPSTR(filedatafixed), (size+(size/2)), countrycode);
  58.         }
  59.         filedata = patternaddr;
  60.     }
  61.    
  62.     SetFilePointer(hFile, NULL, NULL, FILE_BEGIN);
  63.      
  64.     WriteFile(hFile, (LPCVOID)filedatafixed, strlen((char*)filedatafixed), &bytesWritten, NULL);
  65.    
  66.     VirtualFree((LPVOID)origfiledata, size, MEM_DECOMMIT | MEM_RELEASE);
  67.     VirtualFree((LPVOID)origfiledatafixed, (size+(size/4)), MEM_DECOMMIT | MEM_RELEASE);
  68.    
  69.     CloseHandle(hFile);
  70.     return 0;
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement