Posted By: Scifi
CreateDirectory vs fopen - 04/11/15 15:01
So I did a little experiment with CreateDirectory() and fopen(). I wrote a small function to test if the application was run with Administrator rights, simply by creating a empty file/directory on the system drive. (I know there's the OpenProcessToken()/GetTokenInformation() pair which does the job better, but let's keep this simple).
This is my code
With fopen(), everything works fine. Compiled my script, run it normally, printf got executed, says it can't create the file. Right-click, chose "Run as administrator" and the file is created.
But if I substitute fopen() with CreateDirectory(), then the compiled script never creates any folder. I think creating a folder is as the same as creating a file? If so, why fopen() works but not CreateDirectory() ?
Thanks in advance.
Sorry for my bad English.
This is my code
Code:
// Like str_clip (in fact it actually calls str_clip), but returns the cut string. STRING *str_clip_a( STRING *s, int n ) { STRING *l = str_create(_chr(s)); str_trunc(l, str_len(s)-n ); str_clip(s, n); return l; } BOOL IsElevated () { const short len = 384; const short sublen = 3; char drivedir[384], cdir[3]; GetSystemDirectory( drivedir, &len ); strcpy(drivedir, _chr(str_clip_a(drivedir, 3))); // strlen("C:\") = 3 strcat(drivedir, _chr ( str_for_num(NULL, rand()%256) )); // if(0 == CreateDirectory(drivedir, 0)) if(!fopen(drivedir,"w")) printf("Can't create file"); }
With fopen(), everything works fine. Compiled my script, run it normally, printf got executed, says it can't create the file. Right-click, chose "Run as administrator" and the file is created.
But if I substitute fopen() with CreateDirectory(), then the compiled script never creates any folder. I think creating a folder is as the same as creating a file? If so, why fopen() works but not CreateDirectory() ?
Thanks in advance.
Sorry for my bad English.