1.分文件全局变量声明
/*
在B.c文件中调用A.c的全局变量的步骤如下:
1.任何头文件都禁止定义全局变量;
2.如果B.c想用来自A.c的全局变量的话,需要做以下步骤:
①.确保A.h中没有全局变量的定义;
②.去掉A.c中全局变量static的关键字(如果有的话);
③.在B.h中使用《extern》关键字来“声明”来自于A.c的全局变量(注意是声明不是定义,复制粘贴的时候别把值粘过来);
④.在B.c中包含B.h;
⑤.现在,B.c可以正常调用来自A.c的全局变量了。
!!《《再次声明:禁止在任何头文件中定义全局变量》》!!
!!《《再次声明:禁止在任何头文件中定义全局变量》》!!
!!《《再次声明:禁止在任何头文件中定义全局变量》》!!
!!《《再次声明:禁止在任何头文件中定义全局变量》》!!
!!《《再次声明:禁止在任何头文件中定义全局变量》》!!
!!《《再次声明:禁止在任何头文件中定义全局变量》》!!
现在以此项目为例,进行展示:
《注意:不要在任何头文件中定义全局变量;只在实现文件(.c)文件中定义全局变量》
《注意:不要在任何头文件中定义全局变量;只在实现文件(.c)文件中定义全局变量》
《注意:不要在任何头文件中定义全局变量;只在实现文件(.c)文件中定义全局变量》
在这里,cardFunctions.c中定义了两个全局变量g_initialCardNum和g_initialCardColor.
我们想要在playerFunctions.c中调用来自cardFunctions.c中的这两个全局变量。
以下是步骤:
1)确保cardFunctions.h中没有全局变量的定义;
2)去除cardFunctions.c中全局变量static的关键字定义;
3)在playerFunctions.h中《使用extern关键字》来“声明”来自cardFunctions.c的全局变量,注意不要赋值;
4)在playerFunctions.c中包含playerFunctions.h头文件;
5)在playerFunctions.c中就可以正常调用来自cardFunctions.c中全局变量了。
*/
2.循环
GAME_STATUS showPlayerCardStackValid(_IN_ PPlayer player)
{
for (int j = 0; j < MAX_PERSONNAL_CARDS && *(((player->playerCardStack)[j])->num) != '0'; j++)
{
printf("Target Player's %ldth Card is %s%s\n", j + 1, ((player->playerCardStack)[j])->color, ((player->playerCardStack)[j])->num);
}
return STATUS_SUCCESS;
}
之前一个版本没有加
j < MAX_PERSONNAL_CARDS
导致当牌栈满了的时候由于无法识别
*(((player->playerCardStack)[j])->num)
导致内存错误。
3.free高阶指针(II)
GAME_STATUS getCombinedInfo(_OUT_ char**** combinedInfo)
{
*combinedInfo = (char***)malloc(2 * sizeof(char**));
if (*combinedInfo)
{
(*combinedInfo)[0] = (char**)malloc(COUNT_OF_NUM * sizeof(char*));
(*combinedInfo)[1] = (char**)malloc(COUNT_OF_COLOR * sizeof(char*));
}
if (*combinedInfo && (*combinedInfo)[0])
{
for (int j = 0; j < COUNT_OF_NUM; j++)
{
(*combinedInfo)[0][j] = (char*)malloc(BYTES_FOR_SINGLE_NUM * sizeof(char));
}
}
if (*combinedInfo && (*combinedInfo)[1])
{
for (int j = 0; j < COUNT_OF_COLOR; j++)
{
(*combinedInfo)[1][j] = (char*)malloc(BYTES_FOR_SINGLE_COLOR * sizeof(char));
}
}
char* Card_NUM_8 = (char*)"8\0";
char* Card_NUM_9 = (char*)"9\0";
char* Card_NUM_10 = (char*)"10";
char* Card_NUM_J = (char*)"J\0";
char* Card_NUM_Q = (char*)"Q\0";
char* Card_NUM_K = (char*)"K\0";
char* Card_NUM_A = (char*)"A\0";
char* Card_COLOR_梅花 = (char*)"梅花";
char* Card_COLOR_黑桃 = (char*)"黑桃";
char* Card_COLOR_红桃 = (char*)"红桃";
char* Card_COLOR_方片 = (char*)"方片";
if (*combinedInfo && (*combinedInfo)[0] && (*combinedInfo)[0][0] && (*combinedInfo)[0][1] && (*combinedInfo)[0][2] && (*combinedInfo)[0][3] && (*combinedInfo)[0][4] && (*combinedInfo)[0][5] && (*combinedInfo)[0][6])
{
memcpy((*combinedInfo)[0][0], Card_NUM_8, BYTES_FOR_SINGLE_NUM);
memcpy((*combinedInfo)[0][1], Card_NUM_9, BYTES_FOR_SINGLE_NUM);
memcpy((*combinedInfo)[0][2], Card_NUM_10, BYTES_FOR_SINGLE_NUM);
memcpy((*combinedInfo)[0][3], Card_NUM_J, BYTES_FOR_SINGLE_NUM);
memcpy((*combinedInfo)[0][4], Card_NUM_Q, BYTES_FOR_SINGLE_NUM);
memcpy((*combinedInfo)[0][5], Card_NUM_K, BYTES_FOR_SINGLE_NUM);
memcpy((*combinedInfo)[0][6], Card_NUM_A, BYTES_FOR_SINGLE_NUM);
}
if (*combinedInfo && (*combinedInfo)[1] && (*combinedInfo)[1][0] && (*combinedInfo)[1][1] && (*combinedInfo)[1][2] && (*combinedInfo)[1][3])
{
memcpy((*combinedInfo)[1][0], Card_COLOR_梅花, BYTES_FOR_SINGLE_COLOR);
memcpy((*combinedInfo)[1][1], Card_COLOR_黑桃, BYTES_FOR_SINGLE_COLOR);
memcpy((*combinedInfo)[1][2], Card_COLOR_红桃, BYTES_FOR_SINGLE_COLOR);
memcpy((*combinedInfo)[1][3], Card_COLOR_方片, BYTES_FOR_SINGLE_COLOR);
}
return STATUS_SUCCESS;
}
GAME_STATUS killCombinedInfoMemory(_OUT_ char**** combinedInfo)
{
for (int j = 0; j < COUNT_OF_NUM; j++)
{
ExFreeMemoryToNULL((PVOID)(&((*combinedInfo)[0][j])));
}
for (int j = 0; j < COUNT_OF_COLOR; j++)
{
ExFreeMemoryToNULL((PVOID)(&((*combinedInfo)[1][j])));
}
for (int j = 0; j < 2; j++)
{
ExFreeMemoryToNULL((PVOID)(&((*combinedInfo)[j])));
}
ExFreeMemoryToNULL((PVOID)(&(*combinedInfo)));
return STATUS_SUCCESS;
}
和
GAME_STATUS initialPlayerInfo(_OUT_ PPlayer* player)
{
(*player) = (PPlayer)malloc(sizeof(Player));
if (*player)
{
(*player)->playerCardStack = (PCard*)malloc(MAX_PERSONNAL_CARDS * sizeof(PCard));
if ((*player)->playerCardStack)
{
for (int j = 0; j < MAX_PERSONNAL_CARDS; j++)
{
((*player)->playerCardStack)[j] = (PCard)malloc(CARD_ATTRIBUTION_TYPES * sizeof(Card));
}
}
if ((*player)->playerCardStack && ((*player)->playerCardStack)[0] && ((*player)->playerCardStack)[1] && ((*player)->playerCardStack)[2] && ((*player)->playerCardStack)[3] && ((*player)->playerCardStack)[4])
{
for (int j = 0; j < MAX_PERSONNAL_CARDS; j++)
{
(((*player)->playerCardStack)[j])->num = (char*)malloc(BYTES_FOR_SINGLE_NUM * sizeof(char));
(((*player)->playerCardStack)[j])->color = (char*)malloc(BYTES_FOR_SINGLE_COLOR * sizeof(char));
}
}
if ((*player)->playerCardStack && ((*player)->playerCardStack)[0] && ((*player)->playerCardStack)[1] && ((*player)->playerCardStack)[2] && ((*player)->playerCardStack)[3] && ((*player)->playerCardStack)[4])
{
if ((((*player)->playerCardStack)[0])->num && (((*player)->playerCardStack)[1])->num && (((*player)->playerCardStack)[2])->num && (((*player)->playerCardStack)[3])->num && (((*player)->playerCardStack)[4])->num && (((*player)->playerCardStack)[0])->color && (((*player)->playerCardStack)[1])->color && (((*player)->playerCardStack)[2])->color && (((*player)->playerCardStack)[3])->color && (((*player)->playerCardStack)[4])->color)
{
for (int j = 0; j < MAX_PERSONNAL_CARDS; j++)
{
memcpy((((*player)->playerCardStack)[j])->num, g_initialCardNum, BYTES_FOR_SINGLE_NUM);
memcpy((((*player)->playerCardStack)[j])->color, g_initialCardColor, BYTES_FOR_SINGLE_COLOR);
}
}
}
(*player)->chips = 50000;
(*player)->round = 0;
}
return STATUS_SUCCESS;
}
GAME_STATUS killPlayerMemory(_OUT_ PPlayer* player)
{
for (int j = 0; j < MAX_PERSONNAL_CARDS; j++)
{
ExFreeMemoryToNULL((PVOID)(&((((*player)->playerCardStack)[j])->num)));
}
for (int j = 0; j < MAX_PERSONNAL_CARDS; j++)
{
ExFreeMemoryToNULL((PVOID)(&((((*player)->playerCardStack)[j])->color)));
}
for (int j = 0; j < MAX_PERSONNAL_CARDS; j++)
{
ExFreeMemoryToNULL((PVOID)(&(((*player)->playerCardStack)[j])));
}
ExFreeMemoryToNULL((PVOID)(&((*player)->playerCardStack)));
ExFreeMemoryToNULL((PVOID)(&(*player)));
return STATUS_SUCCESS;
}
这次是正确的。第一天有点问题,没free直接NULL了,虽然没报错但是不对。
目前没有任何问题。
目前新加的文件
//showHandPlayerDefs.h
#ifndef __showHandPlayerDefs__
#define __showHandPlayerDefs__
extern char* g_initialCardNum; // From cardFunctions.c extern g_initialCardNum
extern char* g_initialCardColor; // From cardFunctions.c extern g_initialCardColor
#include "showHandDefs.h"
GAME_STATUS initialPlayerInfo(_OUT_ PPlayer* player);
GAME_STATUS sentSingleCardToPlayer(_IN_ PCard card, _IN_ PPlayer player);
GAME_STATUS showPlayerCardStackValid(_IN_ PPlayer player);
GAME_STATUS resetPersonalChips(_IN_ PPlayer player, _IN_ ULONG newChip);
GAME_STATUS incGameRounds(_IN_ PPlayer player);
GAME_STATUS displaySinglePlayerAllInfo(_IN_ PPlayer player);
GAME_STATUS killPlayerMemory(_OUT_ PPlayer* player);
#endif
//playerFunctions.c
#include "showHandPlayerDefs.h"
#include "showHandPublicDefs.h"
GAME_STATUS initialPlayerInfo(_OUT_ PPlayer* player)
{
(*player) = (PPlayer)malloc(sizeof(Player));
if (*player)
{
(*player)->playerCardStack = (PCard*)malloc(MAX_PERSONNAL_CARDS * sizeof(PCard));
if ((*player)->playerCardStack)
{
for (int j = 0; j < MAX_PERSONNAL_CARDS; j++)
{
((*player)->playerCardStack)[j] = (PCard)malloc(CARD_ATTRIBUTION_TYPES * sizeof(Card));
}
}
if ((*player)->playerCardStack && ((*player)->playerCardStack)[0] && ((*player)->playerCardStack)[1] && ((*player)->playerCardStack)[2] && ((*player)->playerCardStack)[3] && ((*player)->playerCardStack)[4])
{
for (int j = 0; j < MAX_PERSONNAL_CARDS; j++)
{
(((*player)->playerCardStack)[j])->num = (char*)malloc(BYTES_FOR_SINGLE_NUM * sizeof(char));
(((*player)->playerCardStack)[j])->color = (char*)malloc(BYTES_FOR_SINGLE_COLOR * sizeof(char));
}
}
if ((*player)->playerCardStack && ((*player)->playerCardStack)[0] && ((*player)->playerCardStack)[1] && ((*player)->playerCardStack)[2] && ((*player)->playerCardStack)[3] && ((*player)->playerCardStack)[4])
{
if ((((*player)->playerCardStack)[0])->num && (((*player)->playerCardStack)[1])->num && (((*player)->playerCardStack)[2])->num && (((*player)->playerCardStack)[3])->num && (((*player)->playerCardStack)[4])->num && (((*player)->playerCardStack)[0])->color && (((*player)->playerCardStack)[1])->color && (((*player)->playerCardStack)[2])->color && (((*player)->playerCardStack)[3])->color && (((*player)->playerCardStack)[4])->color)
{
for (int j = 0; j < MAX_PERSONNAL_CARDS; j++)
{
memcpy((((*player)->playerCardStack)[j])->num, g_initialCardNum, BYTES_FOR_SINGLE_NUM);
memcpy((((*player)->playerCardStack)[j])->color, g_initialCardColor, BYTES_FOR_SINGLE_COLOR);
}
}
}
(*player)->chips = 50000;
(*player)->round = 0;
}
return STATUS_SUCCESS;
}
GAME_STATUS sentSingleCardToPlayer(_IN_ PCard card, _IN_ PPlayer player)
{
int top = 0;
for (int j = 0; j<MAX_PERSONNAL_CARDS; j++)
{
if (*(((player->playerCardStack)[j])->num) == '0')
{
top = j;
break;
}
}
memcpy(((player->playerCardStack)[top])->num, card->num, BYTES_FOR_SINGLE_NUM);
memcpy(((player->playerCardStack)[top])->color, card->color, BYTES_FOR_SINGLE_COLOR);
return STATUS_SUCCESS;
}
GAME_STATUS showPlayerCardStackValid(_IN_ PPlayer player)
{
for (int j = 0; j < MAX_PERSONNAL_CARDS && *(((player->playerCardStack)[j])->num) != '0'; j++)
{
printf("Target Player's %ldth Card is %s%s\n", j + 1, ((player->playerCardStack)[j])->color, ((player->playerCardStack)[j])->num);
}
return STATUS_SUCCESS;
}
GAME_STATUS resetPersonalChips(_IN_ PPlayer player, _IN_ ULONG newChip)
{
player->chips = newChip;
return STATUS_SUCCESS;
}
GAME_STATUS incGameRounds(_IN_ PPlayer player)
{
player->round++;
return STATUS_SUCCESS;
}
GAME_STATUS displaySinglePlayerAllInfo(_IN_ PPlayer player)
{
showPlayerCardStackValid(player);
printf("Chips now: %ld\n", player->chips);
printf("Round now: %ld\n", player->round);
return STATUS_SUCCESS;
}
GAME_STATUS killPlayerMemory(_OUT_ PPlayer* player)
{
for (int j = 0; j < MAX_PERSONNAL_CARDS; j++)
{
ExFreeMemoryToNULL((PVOID)(&((((*player)->playerCardStack)[j])->num)));
}
for (int j = 0; j < MAX_PERSONNAL_CARDS; j++)
{
ExFreeMemoryToNULL((PVOID)(&((((*player)->playerCardStack)[j])->color)));
}
for (int j = 0; j < MAX_PERSONNAL_CARDS; j++)
{
ExFreeMemoryToNULL((PVOID)(&(((*player)->playerCardStack)[j])));
}
ExFreeMemoryToNULL((PVOID)(&((*player)->playerCardStack)));
ExFreeMemoryToNULL((PVOID)(&(*player)));
return STATUS_SUCCESS;
}
修改过的cardFunctions.c
#include "showHandCardDefs.h"
#include "showHandPublicDefs.h"
char* g_initialCardNum = (char*)"0\0";
char* g_initialCardColor = (char*)"无花";
GAME_STATUS initialCard(_OUT_ PCard* card, _IN_ char* num, _IN_ char* color)
{
*card = (PCard)malloc(sizeof(Card));
if (*card)
{
(*card)->num = (char*)malloc(BYTES_FOR_SINGLE_NUM * sizeof(char));
if ((*card)->num)
{
memcpy((*card)->num, num, BYTES_FOR_SINGLE_NUM);
}
(*card)->color = (char*)malloc(BYTES_FOR_SINGLE_COLOR * sizeof(char));
if ((*card)->color)
{
memcpy((*card)->color, color, BYTES_FOR_SINGLE_COLOR);
}
}
return STATUS_SUCCESS;
}
GAME_STATUS initialSentCardsStack(_OUT_ PCard** stack)
{
*stack = (PCard*)malloc(MAX_POSSIBLE_CARDS * sizeof(PCard));
if (*stack)
{
for (int j = 0; j < MAX_POSSIBLE_CARDS; j++)
{
(*stack)[j] = (PCard)malloc(sizeof(Card));
}
for (int j = 0; j < MAX_POSSIBLE_CARDS; j++)
{
if(((*stack)[j]) != NULL)
{
((*stack)[j])->num = (char*)malloc(BYTES_FOR_SINGLE_NUM * sizeof(char));
((*stack)[j])->color = (char*)malloc(BYTES_FOR_SINGLE_COLOR * sizeof(char));
}
}
for (int j = 0; j < MAX_POSSIBLE_CARDS; j++)
{
if (((*stack)[j]) != NULL)
{
if ((*stack)[j]->num && (*stack)[j]->color && g_initialCardNum && g_initialCardColor)
{
memcpy(((*stack)[j])->num, g_initialCardNum, BYTES_FOR_SINGLE_NUM);
memcpy(((*stack)[j])->color, g_initialCardColor, BYTES_FOR_SINGLE_COLOR);
}
}
}
}
return STATUS_SUCCESS;
}
GAME_STATUS getCombinedInfo(_OUT_ char**** combinedInfo)
{
*combinedInfo = (char***)malloc(2 * sizeof(char**));
if (*combinedInfo)
{
(*combinedInfo)[0] = (char**)malloc(COUNT_OF_NUM * sizeof(char*));
(*combinedInfo)[1] = (char**)malloc(COUNT_OF_COLOR * sizeof(char*));
}
if (*combinedInfo && (*combinedInfo)[0])
{
for (int j = 0; j < COUNT_OF_NUM; j++)
{
(*combinedInfo)[0][j] = (char*)malloc(BYTES_FOR_SINGLE_NUM * sizeof(char));
}
}
if (*combinedInfo && (*combinedInfo)[1])
{
for (int j = 0; j < COUNT_OF_COLOR; j++)
{
(*combinedInfo)[1][j] = (char*)malloc(BYTES_FOR_SINGLE_COLOR * sizeof(char));
}
}
char* Card_NUM_8 = (char*)"8\0";
char* Card_NUM_9 = (char*)"9\0";
char* Card_NUM_10 = (char*)"10";
char* Card_NUM_J = (char*)"J\0";
char* Card_NUM_Q = (char*)"Q\0";
char* Card_NUM_K = (char*)"K\0";
char* Card_NUM_A = (char*)"A\0";
char* Card_COLOR_梅花 = (char*)"梅花";
char* Card_COLOR_黑桃 = (char*)"黑桃";
char* Card_COLOR_红桃 = (char*)"红桃";
char* Card_COLOR_方片 = (char*)"方片";
if (*combinedInfo && (*combinedInfo)[0] && (*combinedInfo)[0][0] && (*combinedInfo)[0][1] && (*combinedInfo)[0][2] && (*combinedInfo)[0][3] && (*combinedInfo)[0][4] && (*combinedInfo)[0][5] && (*combinedInfo)[0][6])
{
memcpy((*combinedInfo)[0][0], Card_NUM_8, BYTES_FOR_SINGLE_NUM);
memcpy((*combinedInfo)[0][1], Card_NUM_9, BYTES_FOR_SINGLE_NUM);
memcpy((*combinedInfo)[0][2], Card_NUM_10, BYTES_FOR_SINGLE_NUM);
memcpy((*combinedInfo)[0][3], Card_NUM_J, BYTES_FOR_SINGLE_NUM);
memcpy((*combinedInfo)[0][4], Card_NUM_Q, BYTES_FOR_SINGLE_NUM);
memcpy((*combinedInfo)[0][5], Card_NUM_K, BYTES_FOR_SINGLE_NUM);
memcpy((*combinedInfo)[0][6], Card_NUM_A, BYTES_FOR_SINGLE_NUM);
}
if (*combinedInfo && (*combinedInfo)[1] && (*combinedInfo)[1][0] && (*combinedInfo)[1][1] && (*combinedInfo)[1][2] && (*combinedInfo)[1][3])
{
memcpy((*combinedInfo)[1][0], Card_COLOR_梅花, BYTES_FOR_SINGLE_COLOR);
memcpy((*combinedInfo)[1][1], Card_COLOR_黑桃, BYTES_FOR_SINGLE_COLOR);
memcpy((*combinedInfo)[1][2], Card_COLOR_红桃, BYTES_FOR_SINGLE_COLOR);
memcpy((*combinedInfo)[1][3], Card_COLOR_方片, BYTES_FOR_SINGLE_COLOR);
}
return STATUS_SUCCESS;
}
GAME_STATUS verifyCardAlreadySent(_IN_ PCard card, _IN_ PCard* stack, _OUT_ INT* flag, _OUT_ INT* loc)
{
*flag = 1;
*loc = 0;
for (int j = 0; j < MAX_POSSIBLE_CARDS; j++)
{
if (strncmp(stack[j]->num, card->num, BYTES_FOR_SINGLE_NUM) == 0)
{
if (strncmp(stack[j]->color, card->color, BYTES_FOR_SINGLE_COLOR) == 0)
{
*flag = 0;
*loc = j;
}
}
}
return STATUS_SUCCESS;
}
GAME_STATUS pushCardIntoStack(_IN_ PCard card, _IN_OUT_ PCard* stack)
{
int top = 0;
for (int j = 0; j < MAX_POSSIBLE_CARDS; j++)
{
if(*(stack[j]->num) == '0')
{
top = j;
break;
}
}
memcpy(stack[top]->num, card->num, BYTES_FOR_SINGLE_NUM);
memcpy(stack[top]->color, card->color, BYTES_FOR_SINGLE_COLOR);
return STATUS_SUCCESS;
}
GAME_STATUS displaySentStackValid(_IN_ PCard* stack)
{
for (int j = 0; j < MAX_POSSIBLE_CARDS && *(stack[j]->num) != '0'; j++)
{
printf("%ld -> %s%s\n", j + 1, stack[j]->color, stack[j]->num);
}
return STATUS_SUCCESS;
}
GAME_STATUS displayAllStack(_IN_ PCard* stack)
{
for (int j = 0; j<MAX_POSSIBLE_CARDS; j++)
{
printf("%ld -> %s%s\n", j + 1, stack[j]->color, stack[j]->num);
}
return STATUS_SUCCESS;
}
GAME_STATUS clearSentCardsStack(_IN_OUT_ PCard* stack)
{
for (int j = 0; j < MAX_POSSIBLE_CARDS; j++)
{
memcpy(stack[j]->num, g_initialCardNum, BYTES_FOR_SINGLE_NUM);
memcpy(stack[j]->color, g_initialCardColor, BYTES_FOR_SINGLE_COLOR);
}
return STATUS_SUCCESS;
}
GAME_STATUS killCardMemory(_OUT_ PCard* card)
{
ExFreeMemoryToNULL((PVOID)(&((*card)->num)));
ExFreeMemoryToNULL((PVOID)(&((*card)->color)));
*card = NULL;
return STATUS_SUCCESS;
}
GAME_STATUS killStackMemory(_OUT_ PCard** stack)
{
for (int j = 0; j < MAX_POSSIBLE_CARDS; j++)
{
ExFreeMemoryToNULL((PVOID)(&(((*stack)[j])->num)));
}
for (int j = 0; j < MAX_POSSIBLE_CARDS; j++)
{
ExFreeMemoryToNULL((PVOID)(&(((*stack)[j])->color)));
}
for (int j = 0; j < MAX_POSSIBLE_CARDS; j++)
{
ExFreeMemoryToNULL((PVOID)(&((*stack)[j])));
}
ExFreeMemoryToNULL((PVOID)(&(*stack)));
return STATUS_SUCCESS;
}
GAME_STATUS killCombinedInfoMemory(_OUT_ char**** combinedInfo)
{
for (int j = 0; j < COUNT_OF_NUM; j++)
{
ExFreeMemoryToNULL((PVOID)(&((*combinedInfo)[0][j])));
}
for (int j = 0; j < COUNT_OF_COLOR; j++)
{
ExFreeMemoryToNULL((PVOID)(&((*combinedInfo)[1][j])));
}
for (int j = 0; j < 2; j++)
{
ExFreeMemoryToNULL((PVOID)(&((*combinedInfo)[j])));
}
ExFreeMemoryToNULL((PVOID)(&(*combinedInfo)));
return STATUS_SUCCESS;
}
今天到此为止!