【问题标题】:Making folder lock software by changing permissions in c通过更改c中的权限制作文件夹锁定软件
【发布时间】:2012-11-16 08:56:52
【问题描述】:

我正在创建一个更改文件夹权限的 c 可执行文件。

#include<stdio.h>
#include<dos.h>
main()
{
system("cacls foldername /e /p everyone:n");
}

它会生成一个文件,该文件应该存在于文件夹所在的位置,我们必须在编译时添加文件夹名称。 但是当我这样做时

char foldername[15];
printf("Enter the foldername");
scanf("%s",foldername);
system("cacls %s /e /p everyone:n");

然后它不工作....!请帮我解决这个问题!

【问题讨论】:

  • 当你说“它不工作......!”时,你到底是什么意思?
  • 编译没有错误,但不会改变该文件夹的权限。
  • 如果是 C++,您可以查看 SetNamedSecurityInfo 来更改文件/文件夹权限:msdn.microsoft.com/en-us/library/aa379579(v=vs.85).aspx

标签: c security permissions dos


【解决方案1】:

您对system() 的调用根本不使用foldername。你需要制作命令字符串,然后调用system()

char foldername[15];
printf("Enter the foldername");
scanf("%s", foldername);

char command[100];
sprintf(command, "cacls %s /e /p everyone:n", foldername);
system(command);

当然,此代码容易受到缓冲区溢出的影响:如果用户在其文件夹名称中输入超过 14 个字符,则对 scanf() 的调用会写入 foldername 缓冲区之外,从而导致未定义的行为 — 可能是崩溃,也可能是不是。您的问题被标记为 C++,std::string 为您管理安全的动态内存分配:

using namespace std;

string foldername;
cout << "Enter the folder name: ";
getline(cin, foldername);

ostringstream command;
command << "cacls " << foldername << " /e /p everyone:n";
system(command.str().c_str());

如果您确实在使用 C++,我更喜欢更安全的方法。

【讨论】:

  • 如果你确实在使用 C++,我希望 OP 不要忘记main 的返回类型。
  • @l4zyw0rm: command 是一个ostringstream,一种string 缓冲区,您可以将其作为输出流写入。 .str()ostringstream 转换为 C++ string.c_str() 将 C++ string 转换为 C 风格的 const char*。你可以通过说string command = string("cacls ") + foldername + " /e /p everyone:n"; system(command.c_str()); 来获得相同的行为
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-16
  • 2012-04-27
  • 2012-11-14
  • 1970-01-01
  • 2017-06-15
  • 2018-09-06
相关资源
最近更新 更多