Valhalla Legends Forums Archive | C/C++ Programming | C++ CheckRevision

AuthorMessageTime
Spilled[DW]
having a hardtime doing checkrevision in C++ and im seeking your help. Its giving me error's in the parameters.
(char* to char). Just some feedback on what im doing wrong and what way i should do it is what im seeking. Heres my code:

parsep:

[code]
        case 0x50:
             {
             cout << "0x50 Recieved!\n";
             char hash[len-38];
             CopyMemory(hashing.serverToken,strData+8,4);
             CopyMemory(hash,strData+37,sizeof(hash));
             CopyMemory(hashing.mpqnum,strData+31,1);
             cout << hashing.mpqnum << endl;
             int checksum = 0;
             long versionID = 0;
             char exeInfo[256];
             send(wSock,strData,len,0);
             string ix = "IX86ver";
             ix += hashing.mpqnum;
             checkRevision("STAR/starcraft.exe", "STAR/storm.dll", "STAR/battle.snp", *hash, versionID, checksum, exeInfo, ix); 
             }
        break;
[/code]

this is how i load the dll -
[code]

typedef int (CALLBACK* cbChkRev)(string, string, string, char, long, int, char*, string);
cbChkRev checkRevision;

    chkRev = LoadLibrary("CheckRevision.dll");
    checkRevision = (cbChkRev)GetProcAddress(chkRev, "CheckRevision");
    if(chkRev != 0)
      cout << "CheckRevision.dll Loaded!\n";
    else
      cout << "Failed to load CheckRevision.dll!\n";

[/code]

hashing struct:
[code]
struct HASHING
{
       char serverToken[4];
       char* mpqnum;
};
[/code]

I know im probably doign somethign wrong but this is my first time so no flaming plz. I just need to know what the parameter types i should be passing.
Thanks in advance,
Spilled[DW]
October 17, 2005, 6:31 PM
UserLoser.
Just a reminder, that will not work because the CheckRevision DLLs from Blizzard uses GetModuleHandle(0) and ignores the first parameter.  And that parameter should be char*, not char.  Anyways, with calling CheckRevision from those DLLs, I'm not sure if string would work because that's some class and not a 'built in' type, no?
October 17, 2005, 8:33 PM
Spilled[DW]
So, what do you suggest? i ran into the same problem with my bot in java. The check revision and the functions in hash.dll and bnetauth.dll i used... and i couldnt find no help with those functions. Im lost here bro any help would be appreciated...
October 17, 2005, 11:45 PM
Arta
char*, not string.

You should learn more about C++ before attempting this. Go read about pointers.
October 18, 2005, 9:00 AM
Spilled[DW]
hrmm, since as UserLoser said this wont work. Thanks to LordVader I have recieved Yobgul's checkrevision code. My thanks out to lordvader but this leaves me with another question. Would i be able to use the Hash.dll and the Bnetauth.dll functions?
All help would be appreciated. Thanks in advance!

Userloser, MyndFyre, Arta[vL], Kp - I need your knowledge!
October 19, 2005, 7:31 AM
Kp
[quote author=Spilled[DW] link=topic=13059.msg131535#msg131535 date=1129707069]hrmm, since as UserLoser said this wont work. Thanks to LordVader I have recieved Yobgul's checkrevision code. My thanks out to lordvader but this leaves me with another question. Would i be able to use the Hash.dll and the Bnetauth.dll functions?
All help would be appreciated. Thanks in advance!

Userloser, MyndFyre, Arta[vL], Kp - I need your knowledge![/quote]

Those DLLs are unsupported.  Use BNLS or BNCSutil, depending on whether you want remote or local computations.
October 23, 2005, 3:27 PM
Spilled[DW]
Thanks to Bnetweb.com, I found the source to bnetauth.dll and it has all the functions I need for 0x51 and more... But When I include the header file and try to create a variable for the Header File I get an error. Im not sure if the error is in the bnetauth coding or i've just been staring at the code so long I'm going brain dead. (like I wasn't before :) ) But hey if you can help I would appreciate it.
Heres my code:

Edit: For my sake and MyndFyre's heres my class again Edited.

Solved.
October 24, 2005, 4:14 PM
Myndfyr
All in all, my guess would be that there is NOT A CLASS called "BnetAuth".

I could just see the error....

"Error C2065: 'BnetAuth': undeclared identifier."

Spilled, I want you to look through that code and tell me if you see a class, struct, or typedef that defined "BnetAuth".  Let me know how it works out.

In the future, you might attempt trying to understand the error message instead of blindly flailing about.

Sorry for being an ass, but this is one of the most egregious instances of being oblivious to the information on the screen EVER.
October 24, 2005, 4:23 PM
Spilled[DW]
Well like i said im still learning so im sorry about that so go ahead and flame me, Now that I have gotten that to work passing the DWORD* to function is giving me an error....

I declare the variables like so:

[code]
        case 0x50:
            {
            cout << "0x50 Recieved!\n";
            LPCTSTR files[] = {"/STAR/starcraft.exe", "/STAR/storm.dll", "/STAR/battle.snp"};
            //cout << "1: " << files[0] << " \n2: " << files[1] << " \n3: " << files[2] << "\n";
            LPCTSTR mpqName;
            LPCTSTR hash;
            CopyMemory(&hash,&strData+37,len-38);
            DWORD *versionID;
            DWORD *checksum;
            LPSTR exeInfo;
            CopyMemory(hashing.serverToken,strData+8,4);
[/code]

Pass to CheckVersion like so..
[code]
            if(auth.CheckVersion(files[0], files[1], files[2], hash, versionID, checksum, exeInfo, mpqName) == true)
                              cout << "true! \n";
            else
                              cout << "false! \n";
[/code]

and heres the CheckVersion functions if you need it...
[code]
BOOL BnetAuth::CheckVersion(LPCTSTR lpszFileName1, LPCTSTR lpszFileName2, LPCTSTR lpszFileName3, LPCTSTR lpszValueString, DWORD * lpdwVersion, DWORD * lpdwChecksum, LPSTR lpExeInfoString, LPCTSTR lpszMpqFileName) {
  HANDLE hFile, hFileMapping;
  char * s, lpszFileName[256], cOperations[16];
  int nHashFile, nVariable1[16], nVariable2[16], nVariable3[16], nVariable, i, k, nHashOperations;
  DWORD dwTotalSize, dwSize, j, dwBytesRead, dwVariables[4], dwMpqKey, * lpdwBuffer;
  LPSTR lpszFileNames[3];
  FILETIME ft;
  SYSTEMTIME st;
  LPBYTE lpbBuffer;
  VS_FIXEDFILEINFO * ffi;

  s = strchr((char *) lpszMpqFileName, '.');
  if (s == NULL)
      return FALSE;
  nHashFile = (int) (*(s - 1) - '0');
  if (nHashFile > 7 || nHashFile < 0)
      return FALSE;
  dwMpqKey = dwMpqChecksumKeys[nHashFile];
  lpszFileNames[0] = (LPSTR) lpszFileName1;
  lpszFileNames[1] = (LPSTR) lpszFileName2;
  lpszFileNames[2] = (LPSTR) lpszFileName3;
  s = (char *) lpszValueString;
  while (*s != '\0') {
      if (isalpha(*s))
        nVariable = (int) (toupper(*s) - 'A');
      else {
        nHashOperations = (int) (*s - '0');
        s = strchr(s, ' ');
        if (s == NULL)
            return FALSE;
        s++;
        break;
      }
      if (*(++s) == '=')
        s++;
      dwVariables[nVariable] = atol(s);
      s = strchr(s, ' ');
      if (s == NULL)
        return FALSE;
      s++;
  }
  for (i = 0; i < nHashOperations; i++) {
      if (!isalpha(*s))
        return FALSE;
      nVariable1[i] = (int) (toupper(*s) - 'A');
      if (*(++s) == '=')
        s++;
      if (toupper(*s) == 'S')
        nVariable2[i] = 3;
      else
        nVariable2[i] = (int) (toupper(*s) - 'A');
      cOperations[i] = *(++s);
      s++;
      if (toupper(*s) == 'S')
        nVariable3[i] = 3;
      else
        nVariable3[i] = (int) (toupper(*s) - 'A');
      s = strchr(s, ' ');
      if (s == NULL)
        break;
      s++;
  }
  dwVariables[0] ^= dwMpqKey;
  for (i = 0; i < 3; i++) {
      if (lpszFileNames[i][0] == '\0')
        continue;
      hFile = CreateFile(lpszFileNames[i], GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
      if (hFile == (HANDLE) INVALID_HANDLE_VALUE)
        return FALSE;
      hFileMapping = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 0, NULL);
      if (hFileMapping == NULL) {
        CloseHandle(hFile);
        return FALSE;
      }
      lpdwBuffer = (LPDWORD) MapViewOfFile(hFileMapping, FILE_MAP_READ, 0, 0, 0);
      if (lpdwBuffer == NULL) {
        CloseHandle(hFileMapping);
        CloseHandle(hFile);
        return FALSE;
      }
      if (i == 0) {
        GetFileTime(hFile, &ft, NULL, NULL);
        FileTimeToSystemTime(&ft, &st);
        dwTotalSize = GetFileSize(hFile, NULL);
      }
      dwSize = (GetFileSize(hFile, NULL) / 1024lu) * 1024lu;
      for (j = 0; j < (dwSize / 4lu); j++) {
        dwVariables[3] = lpdwBuffer[j];
        for (k = 0; k < nHashOperations; k++) {
            switch (cOperations[k]) {
              case '+':
                  dwVariables[nVariable1[k]] = dwVariables[nVariable2[k]] + dwVariables[nVariable3[k]];
                  break;
              case '-':
                  dwVariables[nVariable1[k]] = dwVariables[nVariable2[k]] - dwVariables[nVariable3[k]];
                  break;
              case '^':
                  dwVariables[nVariable1[k]] = dwVariables[nVariable2[k]] ^ dwVariables[nVariable3[k]];
                  break;
              default:
                  return FALSE;
            }
        }
      }
      UnmapViewOfFile(lpdwBuffer);
      CloseHandle(hFileMapping);
      CloseHandle(hFile);
  }
  strcpy(lpszFileName, lpszFileName1);
  dwSize = GetFileVersionInfoSize(lpszFileName, &dwBytesRead);
  lpbBuffer = (LPBYTE) VirtualAlloc(NULL, dwSize, MEM_COMMIT, PAGE_READWRITE);
  if (lpbBuffer == NULL)
      return FALSE;
  if (GetFileVersionInfo(lpszFileName, NULL, dwSize, lpbBuffer) == FALSE)
      return FALSE;
  if (VerQueryValue(lpbBuffer, "\\", (LPVOID *) &ffi, (PUINT) &dwSize) == FALSE)
      return FALSE;
  *lpdwVersion = ((HIWORD(ffi->dwProductVersionMS) & 0xFF) << 24) | ((LOWORD(ffi->dwProductVersionMS) & 0xFF) << 16) | ((HIWORD(ffi->dwProductVersionLS) & 0xFF) << 8) | (LOWORD(ffi->dwProductVersionLS) & 0xFF);
  VirtualFree(lpbBuffer, 0lu, MEM_RELEASE);
  s = (char *) &lpszFileName[strlen(lpszFileName)-1];
  while (*s != '\\' && s > (char *) lpszFileName)
      s--;
  s++;
  sprintf(lpExeInfoString, "%s %02u/%02u/%02u %02u:%02u:%02u %lu", s, st.wMonth, st.wDay, st.wYear % 100, st.wHour, st.wMinute, st.wSecond, dwTotalSize);
  *lpdwChecksum = dwVariables[2];
  return TRUE;
}
[/code]

Would appreciate some help vL!
Thanks
October 24, 2005, 7:26 PM
Arta
Nobody will be interested in helping you if you don't try harder to help yourself. I already gave you some sound advice: go learn about pointers. You're not going to accomplish anything quickly if you persist with this trial and error approach. Go and read up about the language and learn some stuff. Then come back to this.
October 24, 2005, 8:33 PM
Kp
[quote author=Spilled[DW] link=topic=13059.msg131870#msg131870 date=1130182009]Well like i said im still learning so im sorry about that so go ahead and flame me, Now that I have gotten that to work passing the DWORD* to function is giving me an error....

Would appreciate some help vL!
Thanks[/quote]

A very cursory glance through your code shows several mistakes, some of which the compiler is not going to catch for you because you've used constructs which convince it (wrongly!) that you know what you're doing.  Stop thinking like this is VB, and stop using CopyMemory unnecessarily.  It's prototyped as taking void pointers, which makes it very dangerous for you right now.

I'd tell you what you're doing wrong, but I agree with Arta.  Besides which, the last time I gave you advice, you proceeded to completely ignore me.
October 25, 2005, 1:16 AM
Spilled[DW]
[quote author=Kp link=topic=13059.msg131887#msg131887 date=1130202977]
[quote author=Spilled[DW] link=topic=13059.msg131870#msg131870 date=1130182009]Well like i said im still learning so im sorry about that so go ahead and flame me, Now that I have gotten that to work passing the DWORD* to function is giving me an error....

Would appreciate some help vL!
Thanks[/quote]

A very cursory glance through your code shows several mistakes, some of which the compiler is not going to catch for you because you've used constructs which convince it (wrongly!) that you know what you're doing. Stop thinking like this is VB, and stop using CopyMemory unnecessarily. It's prototyped as taking void pointers, which makes it very dangerous for you right now.

I'd tell you what you're doing wrong, but I agree with Arta. Besides which, the last time I gave you advice, you proceeded to completely ignore me.
[/quote]

The last time you gave me advice I didn't ignore it, I just didn't understand what you were talking about if I recal right. As for the reading a book, I currently am reading C++ for dummies, which is where I got the dev-C++ compiler. Was just asking what I was doing wrong, but it's ok. I'll go and read somemore. Thanks guys.

Spilled[DW]
October 25, 2005, 5:31 AM
Arta
Btw, if you have a problem with some code and you really can't see the mistake, do feel free to post a *small* snippet - people will generally be willing to look at that. Practically no one, however, wants to dig through 100+ lines of code.
October 25, 2005, 10:43 AM
Spilled[DW]
[quote author=Arta[vL] link=topic=13059.msg131908#msg131908 date=1130237000]
Btw, if you have a problem with some code and you really can't see the mistake, do feel free to post a *small* snippet - people will generally be willing to look at that. Practically no one, however, wants to dig through 100+ lines of code.
[/quote]

I applogize about that. As for your advice, I've read page after page today and I have gotten the values I needed to pass to CheckVersion in the Correct variables except for ExeInfo, in which I am working on currently. Thanks for the help and advice and also the flaming ;)
October 25, 2005, 6:27 PM
Kp
[quote author=Kp link=topic=13059.msg131808#msg131808 date=1130081252]Those DLLs are unsupported.  Use BNLS or BNCSutil, depending on whether you want remote or local computations.
[/quote]

[quote author=Spilled[DW] link=topic=13059.msg131902#msg131902 date=1130218267][quote author=Kp link=topic=13059.msg131887#msg131887 date=1130202977]I'd tell you what you're doing wrong, but I agree with Arta. Besides which, the last time I gave you advice, you proceeded to completely ignore me.[/quote]The last time you gave me advice I didn't ignore it, I just didn't understand what you were talking about if I recal right. As for the reading a book, I currently am reading C++ for dummies, which is where I got the dev-C++ compiler. Was just asking what I was doing wrong, but it's ok. I'll go and read somemore. Thanks guys.[/quote]

I see no indication that you even responded to my advice, much less heeded it or even attempted to understand it.  Indeed, the very next post you made after I suggested BNLS || BNCSutil shows you persisting in digging for inferior code, when the tools I suggested are easily available, well known here, and therefore easier to support here.
October 26, 2005, 1:32 AM
Spilled[DW]
[quote author=Kp link=topic=13059.msg131939#msg131939 date=1130290323]
I see no indication that you even responded to my advice, much less heeded it or even attempted to understand it.  Indeed, the very next post you made after I suggested BNLS || BNCSutil shows you persisting in digging for inferior code, when the tools I suggested are easily available, well known here, and therefore easier to support here.
[/quote]

I apologize, but I prefer hash connection and that is all i meant by that.
October 26, 2005, 5:52 PM
Quarantine
BNCSUtil offers that in an easy to use way better suited for people starting out.
October 26, 2005, 7:33 PM
UserLoser.
[quote author=Spilled[DW] link=topic=13059.msg131965#msg131965 date=1130349138]
[quote author=Kp link=topic=13059.msg131939#msg131939 date=1130290323]
I see no indication that you even responded to my advice, much less heeded it or even attempted to understand it.  Indeed, the very next post you made after I suggested BNLS || BNCSutil shows you persisting in digging for inferior code, when the tools I suggested are easily available, well known here, and therefore easier to support here.
[/quote]

I apologize, but I prefer hash connection and that is all i meant by that.
[/quote]

SYN and ACK are never hashed when creating a connection~ What are you talking about!?
October 26, 2005, 8:15 PM
Spilled[DW]
[quote author=UserLoser link=topic=13059.msg131977#msg131977 date=1130357701]
[quote author=Spilled[DW] link=topic=13059.msg131965#msg131965 date=1130349138]
[quote author=Kp link=topic=13059.msg131939#msg131939 date=1130290323]
I see no indication that you even responded to my advice, much less heeded it or even attempted to understand it.  Indeed, the very next post you made after I suggested BNLS || BNCSutil shows you persisting in digging for inferior code, when the tools I suggested are easily available, well known here, and therefore easier to support here.
[/quote]

I apologize, but I prefer hash connection and that is all i meant by that.
[/quote]

SYN and ACK are never hashed when creating a connection~ What are you talking about!?
[/quote]

I'm talking about Connection using hashes instead of BNLS, What are you talking about!?
October 26, 2005, 11:19 PM
Myndfyr
[quote author=Spilled[DW] link=topic=13059.msg131986#msg131986 date=1130368797]
I'm talking about Connection using hashes instead of BNLS, What are you talking about!?
[/quote]
BNLS hashes data, which you then use to connect to Battle.net, so what are you talking about?
October 26, 2005, 11:34 PM
Myndfyr
[quote author=Spilled[DW] link=topic=13059.msg131870#msg131870 date=1130182009]
Well like i said im still learning so im sorry about that so go ahead and flame me
[/quote]
That's not the point.  These forums aren't here so that we can get people to come here so we can flame them.  Instead of taking suggestions like "You need to learn pointers" as a flame, maybe you should actually learn pointers.


[quote author=Spilled[DW] link=topic=13059.msg131870#msg131870 date=1130182009]
Now that I have gotten that to work passing the DWORD* to function is giving me an error....
[/quote]
OK.  Let's look at the function declaration:
[code]
class BnetAuth
{
public:
      BOOL CheckVersion(LPCTSTR lpszFileName1, LPCTSTR lpszFileName2, LPCTSTR lpszFileName3, LPCTSTR lpszValueString, DWORD * lpdwVersion, DWORD * lpdwChecksum, LPSTR lpExeInfoString, LPCTSTR lpszMpqFileName);
}
[/code]
Before we go any further, I want you to tell me the following so we know you understand what you're doing:
1.) What does LPCTSTR mean?  Specifically, it can mean two things; I want you to tell me what those two things are and when they are them.
2.) Why are lpdwVersion and lpdwChecksum declared as DWORD* instead of DWORD?

[code]
        case 0x50:
             {
             cout << "0x50 Recieved!\n";
             LPCTSTR files[] = {"/STAR/starcraft.exe", "/STAR/storm.dll", "/STAR/battle.snp"};
             //cout << "1: " << files[0] << " \n2: " << files[1] << " \n3: " << files[2] << "\n";
             LPCTSTR mpqName;
             LPCTSTR hash;
             CopyMemory(&hash,&strData+37,len-38);
             DWORD *versionID;
             DWORD *checksum;
             LPSTR exeInfo;
             CopyMemory(hashing.serverToken,strData+8,4);
[/code]
3.) You're using a Windows API function and a Linux file system notation.  Which is it that you want?
4.) Why are you using CopyMemory (which is actually RtlMoveMemory)?  It looks like you're copying strings....  what about strncpy?

[quote author=Spilled[DW] link=topic=13059.msg131870#msg131870 date=1130182009]
Would appreciate some help vL!
[/quote]
With what?  You didn't actually ask a question.

[quote author=Spilled[DW] link=topic=13059.msg131870#msg131870 date=1130182009]
and heres the CheckVersion functions if you need it...
[/quote]
No, we don't need it.  As Kp said, Yobgul's code is not supported here when there are several other viable, practical methods for doing local hashing and revision checks such as BNCSUtil.
October 27, 2005, 2:19 AM
Quarantine
Bah I was never good with those Windows typedefs ;).

If anything (and if you can) BNCSUtil is open source, implement it directly into your code if it's a problem with DLLs.


October 27, 2005, 3:03 AM
UserLoser.
[quote author=Spilled[DW] link=topic=13059.msg131986#msg131986 date=1130368797]
[quote author=UserLoser link=topic=13059.msg131977#msg131977 date=1130357701]
[quote author=Spilled[DW] link=topic=13059.msg131965#msg131965 date=1130349138]
[quote author=Kp link=topic=13059.msg131939#msg131939 date=1130290323]
I see no indication that you even responded to my advice, much less heeded it or even attempted to understand it.  Indeed, the very next post you made after I suggested BNLS || BNCSutil shows you persisting in digging for inferior code, when the tools I suggested are easily available, well known here, and therefore easier to support here.
[/quote]

I apologize, but I prefer hash connection and that is all i meant by that.
[/quote]

SYN and ACK are never hashed when creating a connection~ What are you talking about!?
[/quote]

I'm talking about Connection using hashes instead of BNLS, What are you talking about!?
[/quote]

BNLS uses hashes, and it sends those hashes back to you.  What are you talking about?
October 27, 2005, 3:24 AM
Spilled[DW]
[quote author=UserLoser link=topic=13059.msg132007#msg132007 date=1130383443]
[quote author=Spilled[DW] link=topic=13059.msg131986#msg131986 date=1130368797]
[quote author=UserLoser link=topic=13059.msg131977#msg131977 date=1130357701]
[quote author=Spilled[DW] link=topic=13059.msg131965#msg131965 date=1130349138]
[quote author=Kp link=topic=13059.msg131939#msg131939 date=1130290323]
I see no indication that you even responded to my advice, much less heeded it or even attempted to understand it.  Indeed, the very next post you made after I suggested BNLS || BNCSutil shows you persisting in digging for inferior code, when the tools I suggested are easily available, well known here, and therefore easier to support here.
[/quote]

I apologize, but I prefer hash connection and that is all i meant by that.
[/quote]

SYN and ACK are never hashed when creating a connection~ What are you talking about!?
[/quote]

I'm talking about Connection using hashes instead of BNLS, What are you talking about!?
[/quote]

BNLS uses hashes, and it sends those hashes back to you. What are you talking about?
[/quote]

Ok, let me rephrase this. local hashing so I do not have to depend on BNLS to be updated and be without bot when it's not been updated. I apologize once again.


MyndFyre:

1) LPCTSTR is a pointer to a const char string.
    and for the two things it can mean, i have no idea but I would have to guess... Unicode and DBCS? from looking in MSDN.

2) To pass the memory address to the function so that the variables in the parameters will act as that variable I pass to it... filling it in with the needed data. Key: "pointer"

3) I don't know, why don't you clear that up for me.  :)

4) Hrmm ... maybe I didn't think of that, maybe im still getting familiar with C++.

Finally:

I apologize once again for the Inconvience, but I have learned from my mistakes so... take it how you want it.
October 27, 2005, 6:04 AM
Myndfyr
[quote author=Spilled[DW] link=topic=13059.msg132021#msg132021 date=1130393049]
1) LPCTSTR is a pointer to a const char string.
    and for the two things it can mean, i have no idea but I would have to guess... Unicode and DBCS? from looking in MSDN.
[/quote]
That is close.  LPCTSTR is very basically a char*.  I'm not convinced you know what Unicode is, otherwise you would have labeled its counterpart ANSI, not DBCS.

There are two character types in Visual C++: char and wchar_t.  char is a signed 8-bit value; wchar_t is a signed 16-bit value used specifically for Unicode characters.  Boiled down, LPCTSTR is defined like so:
[code]
#ifdef UNICODE
  typedef const wchar_t *LPCTSTR; // strings are made of 16-bit character literals
#else
  typedef const char *LPCTSTR; // strings are made of 8-bit character literals.
#endif
[/code]

[quote author=Spilled[DW] link=topic=13059.msg132021#msg132021 date=1130393049]
2) To pass the memory address to the function so that the variables in the parameters will act as that variable I pass to it... filling it in with the needed data. Key: "pointer"
[/quote]
That's right.  But let me show you how you declared your variables:
[code]
            DWORD *versionID;
            DWORD *checksum;
[/code]
You have pointers.  Pointer variables store memory addresses.  So far, so good -- that's fairly straightforward.  However, before you call CheckVersion, you never actually take the memory location of a versionID or checksum variable (I really hope you're getting uninitialized pointer errors or warnings when you compile).  Using an uninitialized pointer is like having an envelope with information in it, and an address label on the front of it, but the address label being blank.  It could be useful, but as it is, it's not useful.

Because you're using uninitialized pointers, you could theoretically overwrite program code or attempt to write to a protected page, causing a program crash.  If you're lucky, your compiler will have at least set the pointer's value to NULL before use and you'll crash with only a null pointer error.

[quote author=Spilled[DW] link=topic=13059.msg132021#msg132021 date=1130393049]
3) I don't know, why don't you clear that up for me.  :)
[/quote]
I can't answer that; you're the one writing the program.

[quote author=Spilled[DW] link=topic=13059.msg132021#msg132021 date=1130393049]
4) Hrmm ... maybe I didn't think of that, maybe im still getting familiar with C++.
[/quote]
Stop using that excuse.  It's an excuse to keep writing subpar and incorrect code.  Want to learn the right way or keep saying "I'm lazy," "I don't care to change it," "I didn't know any better."  Make it your job to know better.
October 27, 2005, 11:45 PM
Mangix
[quote]3) I don't know, why don't you clear that up for me.  :)[/quote]
he's saying that you're using *nix style paths in the files[] array

on Windows, file paths are named with \. eg: "C:\Program Files\somefile.exe"

on *nix, they are named like sooooo. "usr/whatever/somefile.bin"(or whatever file extension Executable files have on *nix)
you might wanna fix that to prevent plunty of errors
October 28, 2005, 2:42 AM

Search