Jump to content


Check out our Community Blogs

Register and join over 40,000 other developers!


Recent Status Updates

View All Updates

Photo
- - - - -

Looping until a user presses a key?

loop

  • Please log in to reply
18 replies to this topic

#13 mholt

mholt

    CC Regular

  • No Access
  • PipPipPip
  • 27 posts

Posted 21 January 2008 - 05:06 PM

You're welcome. Actually, I enjoy doing this--I'll take any chance to learn. Are you up for learning some Assembly language? We might have to do that for this.

Well, assembly language is taking it a little too far, I think... I am thinking right now of just handling one question at a time.

Would you want to help me develop this, perchance? I haven't found another app lightweight and free... so eh, there might be possibilities. It might be easier to collaborate our ideas...

Let me know; cause the first concept I want to tackle is the user-control thing, so that only the current logged-on user can have certain file permissions.
  • 0

#14 dargueta

dargueta

    I chown trolls.

  • Moderator
  • 4854 posts
  • Programming Language:C, Java, C++, PHP, Python, JavaScript, Perl, Assembly, Bash, Others
  • Learning:Objective-C

Posted 22 January 2008 - 07:49 PM

You've got me really interested in this now. Of course I'd be happy to collaborate! It's not every day I meet a fellow programmer with the same interests.

A somewhat primitive way of tackling the user name issue is to use (once again) WinAPI to read the user name. If it's not yours, deny all access. I can't remember the function name offhand, but I'll check.
  • 0

#15 dargueta

dargueta

    I chown trolls.

  • Moderator
  • 4854 posts
  • Programming Language:C, Java, C++, PHP, Python, JavaScript, Perl, Assembly, Bash, Others
  • Learning:Objective-C

Posted 22 January 2008 - 08:01 PM

Found it--it's a really illogical name for the function:


char userBuffer[64];
//erase the buffer - not necessary if done once, but if done
//multiple times then yes.
memset(userBuffer,NULL,64);
//read the user name into the buffer
ReadUserName(&userBuffer,63);
//check the value of the user name
if(strcmp("MyUserName",userBuffer) != 0)
printf("ACCESS DENIED.\n");

  • -1

#16 mholt

mholt

    CC Regular

  • No Access
  • PipPipPip
  • 27 posts

Posted 23 January 2008 - 01:49 PM

Hmm... that code doesn't compile in Dev-Cpp under Windows. However, I found this that works:

char userBuffer[64];
DWORD nUserName = sizeof(userBuffer);
GetUserName(userBuffer, &nUserName);
cout << userBuffer << endl;

This successfully prints my current, logged-on, Windows NT (in my case, Vista, but works for XP and 2000 too) system.

Now the only problem would be to compare that to any user trying to do operations on the files...

Btw: I sent you a PM.
  • 0

#17 dargueta

dargueta

    I chown trolls.

  • Moderator
  • 4854 posts
  • Programming Language:C, Java, C++, PHP, Python, JavaScript, Perl, Assembly, Bash, Others
  • Learning:Objective-C

Posted 23 January 2008 - 07:10 PM

It doesn't compile because memset() and strcmp() aren't defined, right? You need to include memory.h and string.h.
  • 0

#18 dargueta

dargueta

    I chown trolls.

  • Moderator
  • 4854 posts
  • Programming Language:C, Java, C++, PHP, Python, JavaScript, Perl, Assembly, Bash, Others
  • Learning:Objective-C

Posted 23 January 2008 - 07:32 PM

I found a way that you can get the owning user name of a process, so you could do the following:
(1)Find all open handles to your file
(2)Get the IDs for the processes that own those handles
(3)Get the user names of those processes' owners
(4)Check the names against your own
(5)Use CancelIO() or something like that to invalidate the other handles.

I found an article on how to do #3, but I don't understand it; maybe you could:
Get Process User Name
It's in C#, of which I have no knowledge.

Here's something about #1...so it is possible, the question is how.
Getting open handles on a particular file
  • 0

#19 mholt

mholt

    CC Regular

  • No Access
  • PipPipPip
  • 27 posts

Posted 23 January 2008 - 08:01 PM

It doesn't compile because memset() and strcmp() aren't defined, right? You need to include memory.h and string.h.

Actually ReadUserName was undefined. But that's okay, got another function to work.

I'll look more into CancelIO(). That Handle thing is a downloadable app for system admins.

We can continue this via IM/email.

Toodles
  • 0





Also tagged with one or more of these keywords: loop

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download