如何使用 C 的 SAL 注释编写此函数?我需要实现一些功能,但我不知道如何声明它们。我只需要 1 个函数作为模型,所以我可以实现其余的。
下面是我的主要 C 文件,其中包含我已经实现的所有句柄,我不需要修改它。
static void
PrintHelp()
{
printf("Available commands:\n");
printf("\t> register <username> <password>\n");
printf("\t> login <username> <password>\n");
printf("\t> logout\n");
printf("\t> store <source file path> <submission name>\n");
printf("\t> retrieve <submission name> <destination file path>\n");
printf("\t> exit\n");
}
int main()
{
char command[10];
char arg1[50];
char arg2[50];
NTSTATUS status = GlobalDataInitialize();
if (!NT_SUCCESS(status))
{
printf("GlobalDataInitialize failed with NTSTATUS = 0x%X\n", status);
assert(FALSE);
return -1;
}
PrintHelp();
do
{
printf("Enter your command:\n");
scanf("%s", command);
if (memcmp(command, "register", sizeof("register")) == 0)
{
scanf("%s", arg1); // username
scanf("%s", arg2); // password
printf("register with username [%s] password [%s]\n", arg1, arg2);
SafeStorageHandleRegister(arg1, (USHORT)strlen(arg1), arg2, (USHORT)strlen(arg2));
}
else if (memcmp(command, "login", sizeof("login")) == 0)
{
scanf("%s", arg1); // username
scanf("%s", arg2); // password
printf("login with username [%s] password [%s]\n", arg1, arg2);
SafeStorageHandleLogin(arg1, (USHORT)strlen(arg1), arg2, (USHORT)strlen(arg2));
}
else if (memcmp(command, "logout", sizeof("logout")) == 0)
{
printf("logout\n");
SafeStorageHandleLogout();
}
else if (memcmp(command, "store", sizeof("store")) == 0)
{
scanf("%s", arg1); // source file path
scanf("%s", arg2); // submission name
printf("store with source file path [%s] submission name [%s]\n", arg1, arg2);
SafeStorageHandleStore(arg2, (USHORT)strlen(arg2), arg1, (USHORT)strlen(arg1));
}
else if (memcmp(command, "retrieve", sizeof("retrieve")) == 0)
{
scanf("%s", arg1); // submission name
scanf("%s", arg2); // destination file path
printf("retrieve with submission name [%s] destination file path [%s]\n", arg1, arg2);
SafeStorageHandleRetrieve(arg1, (USHORT)strlen(arg1), arg2, (USHORT)strlen(arg2));
}
else if (memcmp(command, "exit", sizeof("exit")) == 0)
{
printf("Bye Bye!\n");
break;
}
else
{
printf("Unknown command. Try again!\n");
}
} while (TRUE);
return 0;
我需要帮助来实现这个注册句柄功能。我可以看到这个注册函数有这两个参数Username**Password并且还定义了数据的类型。我不知道如何使用 SAL 注释编写正确的 C 声明来完成这项工作。
// Handles the "register" command
// Creates the user with Username and Password specified
// * Creates the user's subdirectory in the %APPDIR%\users directory
// Fails if the user is already registered
// This command is available only if no user is currently logged in (it must fail otherwise)
// It returns STATUS_SUCCESS if everything succeeded or a proper error status otherwise.
_Must_inspect_result_
NTSTATUS
SafeStorageHandleRegister(
_In_reads_bytes_opt_(UsernameLength) PCHAR Username,
_In_ USHORT UsernameLength,
_In_reads_bytes_opt_(PasswordLength) PCHAR Password,
_In_ USHORT PasswordLength);