本文整理汇总了C++中InitializeListHead函数的典型用法代码示例。如果您正苦于以下问题:C++ InitializeListHead函数的具体用法?C++ InitializeListHead怎么用?C++ InitializeListHead使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了InitializeListHead函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: SockCreate
/**
Create a socket with initial data SockInitData.
@param SockInitData Pointer to the initial data of the socket.
@return Pointer to the newly created socket, return NULL when exception occured.
**/
SOCKET *
SockCreate (
IN SOCK_INIT_DATA *SockInitData
)
{
SOCKET *Sock;
SOCKET *Parent;
EFI_STATUS Status;
ASSERT ((SockInitData != NULL) && (SockInitData->ProtoHandler != NULL));
ASSERT (SockInitData->Type == SockStream);
ASSERT ((SockInitData->ProtoData != NULL) && (SockInitData->DataSize <= PROTO_RESERVED_LEN));
Parent = SockInitData->Parent;
if ((Parent != NULL) && (Parent->ConnCnt == Parent->BackLog)) {
DEBUG (
(EFI_D_ERROR,
"SockCreate: Socket parent has "
"reached its connection limit with %d ConnCnt and %d BackLog\n",
Parent->ConnCnt,
Parent->BackLog)
);
return NULL;
}
Sock = AllocateZeroPool (sizeof (SOCKET));
if (NULL == Sock) {
DEBUG ((EFI_D_ERROR, "SockCreate: No resource to create a new socket\n"));
return NULL;
}
InitializeListHead (&Sock->Link);
InitializeListHead (&Sock->ConnectionList);
InitializeListHead (&Sock->ListenTokenList);
InitializeListHead (&Sock->RcvTokenList);
InitializeListHead (&Sock->SndTokenList);
InitializeListHead (&Sock->ProcessingSndTokenList);
EfiInitializeLock (&(Sock->Lock), TPL_CALLBACK);
Sock->SndBuffer.DataQueue = NetbufQueAlloc ();
if (NULL == Sock->SndBuffer.DataQueue) {
DEBUG ((EFI_D_ERROR, "SockCreate: No resource to allocate"
" SndBuffer for new socket\n"));
goto OnError;
}
Sock->RcvBuffer.DataQueue = NetbufQueAlloc ();
if (NULL == Sock->RcvBuffer.DataQueue) {
DEBUG ((EFI_D_ERROR, "SockCreate: No resource to allocate "
"RcvBuffer for new socket\n"));
goto OnError;
}
Sock->Signature = SOCK_SIGNATURE;
Sock->Parent = Parent;
Sock->BackLog = SockInitData->BackLog;
Sock->ProtoHandler = SockInitData->ProtoHandler;
Sock->SndBuffer.HighWater = SockInitData->SndBufferSize;
Sock->RcvBuffer.HighWater = SockInitData->RcvBufferSize;
Sock->Type = SockInitData->Type;
Sock->DriverBinding = SockInitData->DriverBinding;
Sock->State = SockInitData->State;
Sock->CreateCallback = SockInitData->CreateCallback;
Sock->DestroyCallback = SockInitData->DestroyCallback;
Sock->Context = SockInitData->Context;
Sock->SockError = EFI_ABORTED;
Sock->SndBuffer.LowWater = SOCK_BUFF_LOW_WATER;
Sock->RcvBuffer.LowWater = SOCK_BUFF_LOW_WATER;
//
// Install protocol on Sock->SockHandle
//
CopyMem (
&(Sock->NetProtocol.TcpProtocol),
SockInitData->Protocol,
sizeof (EFI_TCP4_PROTOCOL)
);
//
// copy the protodata into socket
//
CopyMem (Sock->ProtoReserved, SockInitData->ProtoData, SockInitData->DataSize);
Status = gBS->InstallMultipleProtocolInterfaces (
//.........这里部分代码省略.........
开发者ID:EvanLloyd,项目名称:tianocore,代码行数:101,代码来源:SockImpl.c
示例2: FatCreateRootDcb
VOID
NTAPI
FatCreateRootDcb(IN PFAT_IRP_CONTEXT IrpContext,
IN PVCB Vcb)
{
PFCB Dcb;
/* Make sure it's not already created */
ASSERT(!Vcb->RootDcb);
/* Allocate the DCB */
Dcb = FsRtlAllocatePoolWithTag(NonPagedPool,
sizeof(FCB),
TAG_FCB);
/* Zero it */
RtlZeroMemory(Dcb, sizeof(FCB));
/* Assign it to the VCB */
Vcb->RootDcb = Dcb;
/* Set its header */
Dcb->Header.NodeTypeCode = FAT_NTC_ROOT_DCB;
Dcb->Header.NodeByteSize = sizeof(FCB);
/* FCB is in a good condition */
Dcb->Condition = FcbGood;
/* Initialize FCB's resource */
Dcb->Header.Resource = &Dcb->Resource;
ExInitializeResourceLite(&Dcb->Resource);
/* Initialize Paging Io resource*/
Dcb->Header.PagingIoResource = &Dcb->PagingIoResource;
ExInitializeResourceLite(&Dcb->PagingIoResource);
/* Initialize a list of parent DCBs*/
InitializeListHead(&Dcb->ParentDcbLinks);
/* Set VCB */
Dcb->Vcb = Vcb;
/* Initialize parent's DCB list */
InitializeListHead(&Dcb->Dcb.ParentDcbList);
/* Initialize the full file name */
Dcb->FullFileName.Buffer = L"\\";
Dcb->FullFileName.Length = 1 * sizeof(WCHAR);
Dcb->FullFileName.MaximumLength = 2 * sizeof(WCHAR);
Dcb->ShortName.Name.Ansi.Buffer = "\\";
Dcb->ShortName.Name.Ansi.Length = 1;
Dcb->ShortName.Name.Ansi.MaximumLength = 2 * sizeof(CHAR);
/* Fill dirent attribute byte copy */
Dcb->DirentFatFlags = FILE_ATTRIBUTE_DIRECTORY;
/* Initialize advanced FCB header fields */
ExInitializeFastMutex(&Dcb->HeaderMutex);
FsRtlSetupAdvancedHeader(&Dcb->Header, &Dcb->HeaderMutex);
/* Set up first cluster field depending on FAT type */
if (TRUE/*FatIsFat32(Vcb)*/)
{
/* First cluster is really the first cluster of this volume */
Dcb->FirstClusterOfFile = Vcb->Bpb.RootDirFirstCluster;
/* Calculate size of FAT32 root dir */
Dcb->Header.AllocationSize.LowPart = 0xFFFFFFFF;
//FatLookupFileAllocationSize(IrpContext, Dcb);
DPRINT1("Calculation of a size of a root dir is missing!\n");
Dcb->Header.FileSize.QuadPart = Dcb->Header.AllocationSize.QuadPart;
}
else
{
#if 0
/* Add MCB entry */
FatAddMcbEntry(Vcb,
&Dcb->Mcb,
0,
FatRootDirectoryLbo(&Vcb->Bpb),
FatRootDirectorySize(&Vcb->Bpb));
/* Set a real size of the root directory */
Dcb->Header.FileSize.QuadPart = FatRootDirectorySize(&Vcb->Bpb);
Dcb->Header.AllocationSize.QuadPart = Dcb->Header.FileSize.QuadPart;
#endif
UNIMPLEMENTED;
}
}
开发者ID:hoangduit,项目名称:reactos,代码行数:91,代码来源:dir.c
示例3: DriverEntry
//@@@@@@@@@@@@@@@@@@@@@@@@
// IRQL = passive level
//@@@@@@@@@@@@@@@@@@@@@@@@@
extern "C" NTSTATUS DriverEntry( IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING RegistryPath )
{
NTSTATUS Status = {0};
DbgPrint("Keyboard Filter Driver - DriverEntry\nCompiled at " __TIME__ " on " __DATE__ "\n");
/////////////////////////////////////////////////////////////////////////////////////////
// Fill in IRP dispatch table in the DriverObject to handle I/O Request Packets (IRPs)
/////////////////////////////////////////////////////////////////////////////////////////
// For a filter driver, we want pass down ALL IRP_MJ_XX requests to the driver which
// we are hooking except for those we are interested in modifying.
for(int i = 0; i < IRP_MJ_MAXIMUM_FUNCTION; i++)
pDriverObject->MajorFunction[i] = DispatchPassDown;
DbgPrint("Filled dispatch table with generic pass down routine...\n");
//Explicitly fill in the IRP's we want to hook
pDriverObject->MajorFunction[IRP_MJ_READ] = DispatchRead;
//Go ahead and hook the keyboard now
HookKeyboard(pDriverObject);
DbgPrint("Hooked IRP_MJ_READ routine...\n");
//Set up our worker thread to handle file writes of the scan codes extracted from the
//read IRPs
InitThreadKeyLogger(pDriverObject);
//Initialize the linked list that will serve as a queue to hold the captured keyboard scan codes
PDEVICE_EXTENSION pKeyboardDeviceExtension = (PDEVICE_EXTENSION)pDriverObject->DeviceObject->DeviceExtension;
InitializeListHead(&pKeyboardDeviceExtension->QueueListHead);
//Initialize the lock for the linked list queue
KeInitializeSpinLock(&pKeyboardDeviceExtension->lockQueue);
//Initialize the work queue semaphore
KeInitializeSemaphore(&pKeyboardDeviceExtension->semQueue, 0 , MAXLONG);
//Create the log file
IO_STATUS_BLOCK file_status;
OBJECT_ATTRIBUTES obj_attrib;
CCHAR ntNameFile[64] = "\\DosDevices\\c:\\klog.txt";
STRING ntNameString;
UNICODE_STRING uFileName;
RtlInitAnsiString( &ntNameString, ntNameFile);
RtlAnsiStringToUnicodeString(&uFileName, &ntNameString, TRUE );
InitializeObjectAttributes(&obj_attrib, &uFileName, OBJ_CASE_INSENSITIVE, NULL, NULL);
Status = ZwCreateFile(&pKeyboardDeviceExtension->hLogFile,GENERIC_WRITE,&obj_attrib,&file_status,
NULL,FILE_ATTRIBUTE_NORMAL,0,FILE_OPEN_IF,FILE_SYNCHRONOUS_IO_NONALERT,NULL,0);
RtlFreeUnicodeString(&uFileName);
if (Status != STATUS_SUCCESS)
{
DbgPrint("Failed to create log file...\n");
DbgPrint("File Status = %x\n",file_status);
}
else
{
DbgPrint("Successfully created log file...\n");
DbgPrint("File Handle = %x\n",pKeyboardDeviceExtension->hLogFile);
}
// Set the DriverUnload procedure
pDriverObject->DriverUnload = Unload;
DbgPrint("Set DriverUnload function pointer...\n");
DbgPrint("Exiting Driver Entry......\n");
return STATUS_SUCCESS;
}
开发者ID:venidic,项目名称:codes,代码行数:70,代码来源:Klog.cpp
示例4: DllMain
//.........这里部分代码省略.........
PhRegisterCallback(
PhGetGeneralCallback(GeneralCallbackMainWindowShowing),
MainWindowShowingCallback,
NULL,
&MainWindowShowingCallbackRegistration
);
PhRegisterCallback(
PhGetGeneralCallback(GeneralCallbackProcessPropertiesInitializing),
ProcessPropertiesInitializingCallback,
NULL,
&ProcessPropertiesInitializingCallbackRegistration
);
PhRegisterCallback(
PhGetGeneralCallback(GeneralCallbackHandlePropertiesInitializing),
HandlePropertiesInitializingCallback,
NULL,
&HandlePropertiesInitializingCallbackRegistration
);
PhRegisterCallback(
PhGetGeneralCallback(GeneralCallbackProcessMenuInitializing),
ProcessMenuInitializingCallback,
NULL,
&ProcessMenuInitializingCallbackRegistration
);
PhRegisterCallback(
PhGetGeneralCallback(GeneralCallbackThreadMenuInitializing),
ThreadMenuInitializingCallback,
NULL,
&ThreadMenuInitializingCallbackRegistration
);
PhRegisterCallback(
PhGetGeneralCallback(GeneralCallbackModuleMenuInitializing),
ModuleMenuInitializingCallback,
NULL,
&ModuleMenuInitializingCallbackRegistration
);
PhRegisterCallback(
PhGetGeneralCallback(GeneralCallbackProcessTreeNewInitializing),
ProcessTreeNewInitializingCallback,
NULL,
&ProcessTreeNewInitializingCallbackRegistration
);
PhRegisterCallback(
PhGetGeneralCallback(GeneralCallbackNetworkTreeNewInitializing),
NetworkTreeNewInitializingCallback,
NULL,
&NetworkTreeNewInitializingCallbackRegistration
);
PhRegisterCallback(
&PhProcessesUpdatedEvent,
ProcessesUpdatedCallback,
NULL,
&ProcessesUpdatedCallbackRegistration
);
PhRegisterCallback(
&PhNetworkItemsUpdatedEvent,
NetworkItemsUpdatedCallback,
NULL,
&NetworkItemsUpdatedCallbackRegistration
);
InitializeListHead(&EtProcessBlockListHead);
InitializeListHead(&EtNetworkBlockListHead);
PhPluginSetObjectExtension(
PluginInstance,
EmProcessItemType,
sizeof(ET_PROCESS_BLOCK),
ProcessItemCreateCallback,
ProcessItemDeleteCallback
);
PhPluginSetObjectExtension(
PluginInstance,
EmNetworkItemType,
sizeof(ET_NETWORK_BLOCK),
NetworkItemCreateCallback,
NetworkItemDeleteCallback
);
{
static PH_SETTING_CREATE settings[] =
{
{ StringSettingType, SETTING_NAME_DISK_TREE_LIST_COLUMNS, L"" },
{ IntegerPairSettingType, SETTING_NAME_DISK_TREE_LIST_SORT, L"4,2" }, // 4, DescendingSortOrder
{ IntegerSettingType, SETTING_NAME_ENABLE_ETW_MONITOR, L"1" },
{ IntegerSettingType, SETTING_NAME_ETWSYS_ALWAYS_ON_TOP, L"0" },
{ IntegerPairSettingType, SETTING_NAME_ETWSYS_WINDOW_POSITION, L"400,400" },
{ IntegerPairSettingType, SETTING_NAME_ETWSYS_WINDOW_SIZE, L"500,400" },
{ IntegerPairSettingType, SETTING_NAME_MEMORY_LISTS_WINDOW_POSITION, L"400,400" }
};
PhAddSettings(settings, sizeof(settings) / sizeof(PH_SETTING_CREATE));
}
}
break;
}
return TRUE;
}
开发者ID:john-peterson,项目名称:processhacker,代码行数:101,代码来源:main.c
示例5: HvlPerformCtxMerge
/*
Our merge algorithm is pretty straightforward.
1. If the active context is not null and not the helper context, init the list of known contexts with
the active context
2. For all contexts in the inactive context list
a. get the signature of the context
b. For each context constructed so far
if the signature of the two context are compatible
merge the two the context
else
create a new context and add it to the list of constructed contexts
*/
VOID
HvlPerformCtxMerge(
PHVL pHvl,
BOOLEAN *pfMerged
)
{
LIST_ENTRY *pEntryCtx = NULL;
PHVL_CONTEXT pCtx = NULL;
VNIC_SIGNATURE Ctx1Sig = {0}, Ctx2Sig = {0};
BOOLEAN fMerge = FALSE;
PHVL_CONTEXT HvlCtxArray[HVL_NUM_CONTEXTS] = {0};
ULONG ulNumCtxs = 0, ulCtxIndex = 0, ulNumCtxsBeforeMerge = 0;
ASSERT(HvlIsLocked(pHvl));
*pfMerged = FALSE;
if (pHvl->ulNumPortCtxs <= 2)
{
return;
}
ulNumCtxsBeforeMerge = pHvl->ulNumPortCtxs;
/*
1. If the active context is not null and not the helper context, init the list of known contexts with
the active context
*/
if (pHvl->pActiveContext && pHvl->pHelperPortCtx != pHvl->pActiveContext)
{
HvlCtxArray[ulNumCtxs++] = pHvl->pActiveContext;
}
/*
2. For all contexts in the inactive context list
*/
pEntryCtx = pHvl->InactiveContextList.Flink;
while (pEntryCtx != &pHvl->InactiveContextList)
{
pCtx = CONTAINING_RECORD(pEntryCtx, HVL_CONTEXT, Link);
// remove this context from the linked list
RemoveEntryList (&pCtx->Link);
InitializeListHead(&pCtx->Link);
/*
a. get the signature of the context
*/
Ctx1Sig = HvlCtxGetSignature(pCtx);
/*
b. For each context constructed so far
*/
fMerge = FALSE;
for (ulCtxIndex = 0; ulCtxIndex < ulNumCtxs; ulCtxIndex++)
{
Ctx2Sig = HvlCtxGetSignature(HvlCtxArray[ulCtxIndex]);
if (VNic11AreCompatibleSignatures(&Ctx1Sig, &Ctx2Sig))
{
fMerge = TRUE;
break;
}
}
/*
if the signature of the two context are compatible
merge the two the context
else
create a new context and add it to the list of constructed contexts
*/
if (fMerge)
{
HvlMergeCtxs(pHvl, pCtx, HvlCtxArray[ulCtxIndex]);
}
else
{
HvlCtxArray[ulNumCtxs++] = pCtx;
}
// move to the next context in the inactive context list
pEntryCtx = pHvl->InactiveContextList.Flink;
}
/*
We have walked the complete linked list of contexts
*/
ASSERT(IsListEmpty(&pHvl->InactiveContextList));
//.........这里部分代码省略.........
开发者ID:Realhram,项目名称:wdk81,代码行数:101,代码来源:hvl_context.c
示例6: TcpAttachPcb
/**
Attach a Pcb to the socket.
@param[in] Sk Pointer to the socket of this TCP instance.
@retval EFI_SUCCESS The operation completed successfully.
@retval EFI_OUT_OF_RESOURCES Failed due to resource limits.
**/
EFI_STATUS
TcpAttachPcb (
IN SOCKET *Sk
)
{
TCP_CB *Tcb;
TCP_PROTO_DATA *ProtoData;
IP_IO *IpIo;
EFI_STATUS Status;
VOID *Ip;
EFI_GUID *IpProtocolGuid;
if (Sk->IpVersion == IP_VERSION_4) {
IpProtocolGuid = &gEfiIp4ProtocolGuid;
} else {
IpProtocolGuid = &gEfiIp6ProtocolGuid;
}
Tcb = AllocateZeroPool (sizeof (TCP_CB));
if (Tcb == NULL) {
DEBUG ((EFI_D_ERROR, "TcpConfigurePcb: failed to allocate a TCB\n"));
return EFI_OUT_OF_RESOURCES;
}
ProtoData = (TCP_PROTO_DATA *) Sk->ProtoReserved;
IpIo = ProtoData->TcpService->IpIo;
//
// Create an IpInfo for this Tcb.
//
Tcb->IpInfo = IpIoAddIp (IpIo);
if (Tcb->IpInfo == NULL) {
FreePool (Tcb);
return EFI_OUT_OF_RESOURCES;
}
//
// Open the new created IP instance BY_CHILD.
//
Status = gBS->OpenProtocol (
Tcb->IpInfo->ChildHandle,
IpProtocolGuid,
&Ip,
IpIo->Image,
Sk->SockHandle,
EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER
);
if (EFI_ERROR (Status)) {
IpIoRemoveIp (IpIo, Tcb->IpInfo);
return Status;
}
InitializeListHead (&Tcb->List);
InitializeListHead (&Tcb->SndQue);
InitializeListHead (&Tcb->RcvQue);
Tcb->State = TCP_CLOSED;
Tcb->Sk = Sk;
ProtoData->TcpPcb = Tcb;
return EFI_SUCCESS;
}
开发者ID:FishYu1222,项目名称:edk2,代码行数:75,代码来源:TcpDispatcher.c
示例7: CreatePciIoDevice
PCI_IO_DEVICE *
CreatePciIoDevice (
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *PciRootBridgeIo,
IN PCI_TYPE00 *Pci,
UINT8 Bus,
UINT8 Device,
UINT8 Func
)
/*++
Routine Description:
Arguments:
Returns:
None
--*/
{
EFI_STATUS Status;
PCI_IO_DEVICE *PciIoDevice;
PciIoDevice = NULL;
Status = gBS->AllocatePool (
EfiBootServicesData,
sizeof (PCI_IO_DEVICE),
(VOID **) &PciIoDevice
);
if (EFI_ERROR (Status)) {
return NULL;
}
ZeroMem (PciIoDevice, sizeof (PCI_IO_DEVICE));
PciIoDevice->Signature = PCI_IO_DEVICE_SIGNATURE;
PciIoDevice->Handle = NULL;
PciIoDevice->PciRootBridgeIo = PciRootBridgeIo;
PciIoDevice->DevicePath = NULL;
PciIoDevice->BusNumber = Bus;
PciIoDevice->DeviceNumber = Device;
PciIoDevice->FunctionNumber = Func;
PciIoDevice->Decodes = 0;
if (gFullEnumeration) {
PciIoDevice->Allocated = FALSE;
} else {
PciIoDevice->Allocated = TRUE;
}
PciIoDevice->Attributes = 0;
PciIoDevice->Supports = 0;
PciIoDevice->BusOverride = FALSE;
PciIoDevice->IsPciExp = FALSE;
CopyMem (&(PciIoDevice->Pci), Pci, sizeof (PCI_TYPE01));
//
// Initialize the PCI I/O instance structure
//
Status = InitializePciIoInstance (PciIoDevice);
Status = InitializePciDriverOverrideInstance (PciIoDevice);
if (EFI_ERROR (Status)) {
gBS->FreePool (PciIoDevice);
return NULL;
}
//
// Initialize the reserved resource list
//
InitializeListHead (&PciIoDevice->ReservedResourceList);
//
// Initialize the driver list
//
InitializeListHead (&PciIoDevice->OptionRomDriverList);
//
// Initialize the child list
//
InitializeListHead (&PciIoDevice->ChildList);
return PciIoDevice;
}
开发者ID:coolstar,项目名称:edk2,代码行数:88,代码来源:PciEnumeratorSupport.c
示例8: PrimarySession_Create
PPRIMARY_SESSION
PrimarySession_Create (
IN PIRP_CONTEXT IrpContext,
IN PVOLUME_DEVICE_OBJECT VolDo,
IN PSESSION_INFORMATION SessionInformation,
IN PIRP Irp
)
{
PPRIMARY_SESSION primarySession;
OBJECT_ATTRIBUTES objectAttributes;
NTSTATUS status;
LARGE_INTEGER timeOut;
ASSERT( KeGetCurrentIrql() == PASSIVE_LEVEL );
VolDo_Reference( VolDo );
primarySession = FsRtlAllocatePoolWithTag( NonPagedPool, sizeof(PRIMARY_SESSION), NDFAT_ALLOC_TAG );
if (primarySession == NULL) {
ASSERT( NDASFAT_INSUFFICIENT_RESOURCES );
VolDo_Dereference( VolDo );
return NULL;
}
try {
RtlZeroMemory( primarySession, sizeof(PRIMARY_SESSION) );
primarySession->Flags = PRIMARY_SESSION_FLAG_INITIALIZING;
primarySession->ReferenceCount = 1;
primarySession->VolDo = VolDo;
ExInitializeFastMutex( &primarySession->FastMutex );
InitializeListHead( &primarySession->ListEntry );
primarySession->NetdiskPartitionInformation = SessionInformation->NetdiskPartitionInformation;
RtlInitEmptyUnicodeString( &primarySession->NetdiskPartitionInformation.VolumeName,
primarySession->NetdiskPartitionInformation.VolumeNameBuffer,
sizeof(primarySession->NetdiskPartitionInformation.VolumeNameBuffer) );
if (RtlAppendUnicodeStringToString( &primarySession->NetdiskPartitionInformation.VolumeName,
&SessionInformation->NetdiskPartitionInformation.VolumeName) != STATUS_SUCCESS) {
ASSERT( NDASFAT_UNEXPECTED );
}
ASSERT( primarySession->NetdiskPartitionInformation.VolumeName.Buffer == primarySession->NetdiskPartitionInformation.VolumeNameBuffer );
primarySession->ConnectionFileHandle = SessionInformation->ConnectionFileHandle;
primarySession->ConnectionFileObject = SessionInformation->ConnectionFileObject;
primarySession->RemoteAddress = SessionInformation->RemoteAddress;
primarySession->IsLocalAddress = SessionInformation->IsLocalAddress;
primarySession->Irp = Irp;
primarySession->SessionContext = SessionInformation->SessionContext;
primarySession->SessionContext.PrimaryMaxDataSize = DEFAULT_NDAS_MAX_DATA_SIZE; //SessionInformation->PrimaryMaxDataSize;
primarySession->SessionContext.SecondaryMaxDataSize = DEFAULT_NDAS_MAX_DATA_SIZE; // SessionInformation->SecondaryMaxDataSize;
DebugTrace2( 0, Dbg2, ("primarySession->ConnectionFileHandle = %x "
"primarySession->SessionContext.PrimaryMaxDataSize = %x primarySession->SessionContext.SecondaryMaxDataSize = %x\n",
primarySession->ConnectionFileHandle, primarySession->SessionContext.PrimaryMaxDataSize, primarySession->SessionContext.SecondaryMaxDataSize) );
KeInitializeEvent( &primarySession->ReadyEvent, NotificationEvent, FALSE );
InitializeListHead( &primarySession->RequestQueue );
KeInitializeSpinLock( &primarySession->RequestQSpinLock );
KeInitializeEvent( &primarySession->RequestEvent, NotificationEvent, FALSE );
primarySession->ThreadHandle = 0;
primarySession->ThreadObject = NULL;
primarySession->Thread.TdiReceiveContext.Irp = NULL;
KeInitializeEvent( &primarySession->Thread.TdiReceiveContext.CompletionEvent, NotificationEvent, FALSE );
InitializeObjectAttributes( &objectAttributes, NULL, OBJ_KERNEL_HANDLE, NULL, NULL );
primarySession->Thread.SessionState = SESSION_TREE_CONNECT;
ExInterlockedInsertTailList( &VolDo->PrimarySessionQueue,
&primarySession->ListEntry,
&VolDo->PrimarySessionQSpinLock );
status = PsCreateSystemThread( &primarySession->ThreadHandle,
THREAD_ALL_ACCESS,
&objectAttributes,
NULL,
NULL,
PrimarySessionThreadProc,
primarySession );
if (!NT_SUCCESS(status)) {
//.........这里部分代码省略.........
开发者ID:olivecake,项目名称:ndas4windows,代码行数:101,代码来源:PrimarySession.c
示例9: KdPrintKrnl
BOOLEAN
CLog::Init()
{
BOOLEAN bRet = FALSE;
NTSTATUS ntStatus = STATUS_UNSUCCESSFUL;
HANDLE hThead = NULL;
KdPrintKrnl(LOG_PRINTF_LEVEL_INFO, LOG_RECORED_LEVEL_NEEDNOT, L"begin");
__try
{
InitializeListHead(&ms_ListHead);
KeInitializeSpinLock(&ms_SpLock);
ExInitializeResourceLite(&ms_Lock);
KeInitializeEvent(&ms_UnloadEvent, NotificationEvent, FALSE);
ms_pLogFile = new(MEMORY_TAG_LOG) CKrnlStr;
ms_pLogDir = new(MEMORY_TAG_LOG) CKrnlStr;
ntStatus = PsCreateSystemThread(
&hThead,
GENERIC_ALL,
NULL,
NULL,
NULL,
ThreadStart,
NULL
);
if (!NT_SUCCESS(ntStatus))
{
KdPrintKrnl(LOG_PRINTF_LEVEL_ERROR, LOG_RECORED_LEVEL_NEEDNOT, L"PsCreateSystemThread failed. (%x)",
ntStatus);
__leave;
}
ntStatus = ObReferenceObjectByHandle(
hThead,
GENERIC_ALL,
*PsThreadType,
KernelMode,
(PVOID *)&ms_pEThread,
NULL
);
if (!NT_SUCCESS(ntStatus))
{
KdPrintKrnl(LOG_PRINTF_LEVEL_ERROR, LOG_RECORED_LEVEL_NEEDNOT, L"ObReferenceObjectByHandle failed. (%x)",
ntStatus);
__leave;
}
KeSetBasePriorityThread(ms_pEThread, -4);
ms_bCanInsertLog = TRUE;
bRet = TRUE;
}
__finally
{
// 不要置为NULL
if (ms_pEThread)
ObDereferenceObject(ms_pEThread);
if (hThead)
{
ZwClose(hThead);
hThead = NULL;
}
if (!bRet)
{
delete ms_pLogFile;
ms_pLogFile = NULL;
delete ms_pLogDir;
ms_pLogDir = NULL;
ExDeleteResourceLite(&ms_Lock);
RtlZeroMemory(&ms_Lock, sizeof(ms_Lock));
}
}
KdPrintKrnl(LOG_PRINTF_LEVEL_INFO, LOG_RECORED_LEVEL_NEEDNOT, L"end");
return bRet;
}
开发者ID:fengkuangfj,项目名称:SecretDisk2,代码行数:89,代码来源:Log.cpp
示例10: FsRtlPrivateLock
/*
* @implemented
*/
BOOLEAN
NTAPI
FsRtlPrivateLock(IN PFILE_LOCK FileLock,
IN PFILE_OBJECT FileObject,
IN PLARGE_INTEGER FileOffset,
IN PLARGE_INTEGER Length,
IN PEPROCESS Process,
IN ULONG Key,
IN BOOLEAN FailImmediately,
IN BOOLEAN ExclusiveLock,
OUT PIO_STATUS_BLOCK IoStatus,
IN PIRP Irp OPTIONAL,
IN PVOID Context OPTIONAL,
IN BOOLEAN AlreadySynchronized)
{
NTSTATUS Status;
COMBINED_LOCK_ELEMENT ToInsert;
PCOMBINED_LOCK_ELEMENT Conflict;
PLOCK_INFORMATION LockInfo;
PLOCK_SHARED_RANGE NewSharedRange;
BOOLEAN InsertedNew;
ULARGE_INTEGER UnsignedStart;
ULARGE_INTEGER UnsignedEnd;
DPRINT("FsRtlPrivateLock(%wZ, Offset %08x%08x (%d), Length %08x%08x (%d), Key %x, FailImmediately %u, Exclusive %u)\n",
&FileObject->FileName,
FileOffset->HighPart,
FileOffset->LowPart,
(int)FileOffset->QuadPart,
Length->HighPart,
Length->LowPart,
(int)Length->QuadPart,
Key,
FailImmediately,
ExclusiveLock);
UnsignedStart.QuadPart = FileOffset->QuadPart;
UnsignedEnd.QuadPart = FileOffset->QuadPart + Length->QuadPart;
if (UnsignedEnd.QuadPart < UnsignedStart.QuadPart)
{
DPRINT("File offset out of range\n");
IoStatus->Status = STATUS_INVALID_PARAMETER;
if (Irp)
{
DPRINT("Complete lock %p Status %x\n", Irp, IoStatus->Status);
FsRtlCompleteLockIrpReal
(FileLock->CompleteLockIrpRoutine,
Context,
Irp,
IoStatus->Status,
&Status,
FileObject);
}
return FALSE;
}
/* Initialize the lock, if necessary */
if (!FileLock->LockInformation)
{
LockInfo = ExAllocatePoolWithTag(NonPagedPool, sizeof(LOCK_INFORMATION), TAG_FLOCK);
if (!LockInfo)
{
IoStatus->Status = STATUS_NO_MEMORY;
return FALSE;
}
FileLock->LockInformation = LockInfo;
LockInfo->BelongsTo = FileLock;
InitializeListHead(&LockInfo->SharedLocks);
RtlInitializeGenericTable
(&LockInfo->RangeTable,
LockCompare,
LockAllocate,
LockFree,
NULL);
KeInitializeSpinLock(&LockInfo->CsqLock);
InitializeListHead(&LockInfo->CsqList);
IoCsqInitializeEx
(&LockInfo->Csq,
LockInsertIrpEx,
LockRemoveIrp,
LockPeekNextIrp,
LockAcquireQueueLock,
LockReleaseQueueLock,
LockCompleteCanceledIrp);
}
LockInfo = FileLock->LockInformation;
ToInsert.Exclusive.FileLock.FileObject = FileObject;
ToInsert.Exclusive.FileLock.StartingByte = *FileOffset;
ToInsert.Exclusive.FileLock.EndingByte.QuadPart = FileOffset->QuadPart + Length->QuadPart;
ToInsert.Exclusive.FileLock.ProcessId = Process->UniqueProcessId;
ToInsert.Exclusive.FileLock.Key = Key;
//.........这里部分代码省略.........
开发者ID:RPG-7,项目名称:reactos,代码行数:101,代码来源:filelock.c
示例11: IfConfig6Initialize
/**
This is the declaration of an EFI image entry point. This entry point is
the same for UEFI Applications, UEFI OS Loaders, and UEFI Drivers, including
both device drivers and bus drivers.
The entry point for the IfConfig6 application which parses the command line input and calls the IfConfig6 process.
@param[in] ImageHandle The image handle of this application.
@param[in] SystemTable The pointer to the EFI System Table.
@retval EFI_SUCCESS The operation completed successfully.
@retval Others Some errors occur.
**/
EFI_STATUS
EFIAPI
IfConfig6Initialize (
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
)
{
EFI_STATUS Status;
IFCONFIG6_PRIVATE_DATA *Private;
LIST_ENTRY *ParamPackage;
CONST CHAR16 *ValueStr;
ARG_LIST *ArgList;
CHAR16 *ProblemParam;
CHAR16 *Str;
Private = NULL;
//
// Register our string package with HII and return the handle to it.
//
mHiiHandle = HiiAddPackages (&gEfiCallerIdGuid, ImageHandle, IfConfig6Strings, NULL);
ASSERT (mHiiHandle != NULL);
Status = ShellCommandLineParseEx (mIfConfig6CheckList, &ParamPackage, &ProblemParam, TRUE, FALSE);
if (EFI_ERROR (Status)) {
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_ERR_INVALID_COMMAND), mHiiHandle, ProblemParam);
goto ON_EXIT;
}
//
// To handle no option.
//
if (!ShellCommandLineGetFlag (ParamPackage, L"-r") && !ShellCommandLineGetFlag (ParamPackage, L"-s") &&
!ShellCommandLineGetFlag (ParamPackage, L"-?") && !ShellCommandLineGetFlag (ParamPackage, L"-l")) {
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_LACK_OPTION), mHiiHandle);
goto ON_EXIT;
}
//
// To handle conflict options.
//
if (((ShellCommandLineGetFlag (ParamPackage, L"-r")) && (ShellCommandLineGetFlag (ParamPackage, L"-s"))) ||
((ShellCommandLineGetFlag (ParamPackage, L"-r")) && (ShellCommandLineGetFlag (ParamPackage, L"-l"))) ||
((ShellCommandLineGetFlag (ParamPackage, L"-r")) && (ShellCommandLineGetFlag (ParamPackage, L"-?"))) ||
((ShellCommandLineGetFlag (ParamPackage, L"-s")) && (ShellCommandLineGetFlag (ParamPackage, L"-l"))) ||
((ShellCommandLineGetFlag (ParamPackage, L"-s")) && (ShellCommandLineGetFlag (ParamPackage, L"-?"))) ||
((ShellCommandLineGetFlag (ParamPackage, L"-l")) && (ShellCommandLineGetFlag (ParamPackage, L"-?")))) {
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_CONFLICT_OPTIONS), mHiiHandle);
goto ON_EXIT;
}
//
// To show the help information of ifconfig6 command.
//
if (ShellCommandLineGetFlag (ParamPackage, L"-?")) {
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG6_HELP), mHiiHandle);
goto ON_EXIT;
}
Status = EFI_INVALID_PARAMETER;
Private = AllocateZeroPool (sizeof (IFCONFIG6_PRIVATE_DATA));
if (Private == NULL) {
Status = EFI_OUT_OF_RESOURCES;
goto ON_EXIT;
}
InitializeListHead (&Private->IfList);
//
// To get interface name for the list option.
//
if (ShellCommandLineGetFlag (ParamPackage, L"-l")) {
Private->OpCode = IfConfig6OpList;
ValueStr = ShellCommandLineGetValue (ParamPackage, L"-l");
if (ValueStr != NULL) {
Str = (CHAR16 *) AllocateZeroPool (StrSize (ValueStr));
ASSERT (Str != NULL);
Str = StrCpy (Str, ValueStr);
Private->IfName = Str;
}
}
//
// To get interface name for the clear option.
//
if (ShellCommandLineGetFlag (ParamPackage, L"-r")) {
//.........这里部分代码省略.........
开发者ID:etiago,项目名称:vbox,代码行数:101,代码来源:IfConfig6.c
示例12: TestInterlockedDList
int TestInterlockedDList(int argc, char* argv[])
{
ULONG Count;
PLIST_ITEM pListItem;
PLIST_ENTRY pListHead;
PLIST_ENTRY pListEntry;
pListHead = (PLIST_ENTRY) _aligned_malloc(sizeof(LIST_ENTRY), MEMORY_ALLOCATION_ALIGNMENT);
if (!pListHead)
{
printf("Memory allocation failed.\n");
return -1;
}
InitializeListHead(pListHead);
if (!IsListEmpty(pListHead))
{
printf("Expected empty list\n");
return -1;
}
/* InsertHeadList / RemoveHeadList */
printf("InsertHeadList / RemoveHeadList\n");
for (Count = 1; Count <= 10; Count += 1)
{
pListItem = (PLIST_ITEM) _aligned_malloc(sizeof(LIST_ITEM), MEMORY_ALLOCATION_ALIGNMENT);
pListItem->Signature = Count;
InsertHeadList(pListHead, &(pListItem->ItemEntry));
}
for (Count = 10; Count >= 1; Count -= 1)
{
pListEntry = RemoveHeadList(pListHead);
pListItem = (PLIST_ITEM) pListEntry;
_aligned_free(pListEntry);
}
/* InsertTailList / RemoveTailList */
printf("InsertTailList / RemoveTailList\n");
for (Count = 1; Count <= 10; Count += 1)
{
pListItem = (PLIST_ITEM) _aligned_malloc(sizeof(LIST_ITEM), MEMORY_ALLOCATION_ALIGNMENT);
pListItem->Signature = Count;
InsertTailList(pListHead, &(pListItem->ItemEntry));
}
for (Count = 10; Count >= 1; Count -= 1)
{
pListEntry = RemoveTailList(pListHead);
pListItem = (PLIST_ITEM) pListEntry;
_aligned_free(pListEntry);
}
_aligned_free(pListHead);
return 0;
}
开发者ID:10084462,项目名称:FreeRDP,代码行数:63,代码来源:TestInterlockedDList.c
示例13: FvSimpleFileSystemOpen
/**
Opens a new file relative to the source file's location.
@param This A pointer to the EFI_FILE_PROTOCOL instance that is the file
handle to the source location. This would typically be an open
handle to a directory.
@param NewHandle A pointer to the location to return the opened handle for the new
file.
@param FileName The Null-terminated string of the name of the file to be opened.
The file name may contain the following path modifiers: "\", ".",
and "..".
@param OpenMode The mode to open the file. The only valid combinations that the
file may be opened with are: Read, Read/Write, or Create/Read/Write.
@param Attributes Only valid for EFI_FILE_MODE_CREATE, in which case these are the
attribute bits for the newly created file.
@retval EFI_SUCCESS The file was opened.
@retval EFI_NOT_FOUND The specified file could not be found on the device.
@retval EFI_NO_MEDIA The device has no medium.
@retval EFI_MEDIA_CHANGED The device has a different medium in it or the medium is no
longer supported.
@retval EFI_DEVICE_ERROR The device reported an error.
@retval EFI_VOLUME_CORRUPTED The file system structures are corrupted.
@retval EFI_WRITE_PROTECTED An attempt was made to create a file, or open a file for write
when the media is write-protected.
@retval EFI_ACCESS_DENIED The service denied access to the file.
@retval EFI_OUT_OF_RESOURCES Not enough resources were available to open the file.
@retval EFI_VOLUME_FULL The volume is full.
**/
EFI_STATUS
EFIAPI
FvSimpleFileSystemOpen (
IN EFI_FILE_PROTOCOL *This,
OUT EFI_FILE_PROTOCOL **NewHandle,
IN CHAR16 *FileName,
IN UINT64 OpenMode,
IN UINT64 Attributes
)
{
FV_FILESYSTEM_INSTANCE *Instance;
FV_FILESYSTEM_FILE *File;
FV_FILESYSTEM_FILE *NewFile;
FV_FILESYSTEM_FILE_INFO *FvFileInfo;
LIST_ENTRY *FvFileInfoLink;
EFI_STATUS Status;
UINTN FileNameLength;
UINTN NewFileNameLength;
CHAR16 *FileNameWithExtension;
//
// Check for a valid mode
//
switch (OpenMode) {
case EFI_FILE_MODE_READ:
break;
default:
return EFI_WRITE_PROTECTED;
}
File = FVFS_FILE_FROM_FILE_THIS (This);
Instance = File->Instance;
FileName = TrimFilePathToAbsolutePath (FileName);
if (FileName == NULL) {
return EFI_INVALID_PARAMETER;
}
if (FileName[0] == L'\\') {
FileName++;
}
//
// Check for opening root
//
if (StrCmp (FileName, L".") == 0 || StrCmp (FileName, L"") == 0) {
NewFile = AllocateZeroPool (sizeof (FV_FILESYSTEM_FILE));
if (NewFile == NULL) {
return EFI_OUT_OF_RESOURCES;
}
NewFile->Signature = FVFS_FILE_SIGNATURE;
NewFile->Instance = Instance;
NewFile->FvFileInfo = File->FvFileInfo;
CopyMem (&NewFile->FileProtocol, &mFileSystemTemplate, sizeof (mFileSystemTemplate));
InitializeListHead (&NewFile->Link);
InsertHeadList (&Instance->FileHead, &NewFile->Link);
NewFile->DirReadNext = NULL;
if (!IsListEmpty (&Instance->FileInfoHead)) {
NewFile->DirReadNext = FVFS_GET_FIRST_FILE_INFO (Instance);
}
*NewHandle = &NewFile->FileProtocol;
return EFI_SUCCESS;
}
//
// Do a linear search for a file in the FV with a matching filename
//
//.........这里部分代码省略.........
开发者ID:MattDevo,项目名称:edk2,代码行数:101,代码来源:FvSimpleFileSystem.c
示例14: RegCreateKey
LONG
RegCreateKey(FRLDRHKEY ParentKey,
PCWSTR KeyName,
PFRLDRHKEY Key)
{
PLIST_ENTRY Ptr;
FRLDRHKEY SearchKey = NULL;
FRLDRHKEY CurrentKey;
FRLDRHKEY NewKey;
PWCHAR p;
PCWSTR name;
int subkeyLength;
int stringLength;
ULONG NameSize;
int CmpResult;
TRACE("KeyName '%S'\n", KeyName);
if (*KeyName == L'\\')
{
KeyName++;
CurrentKey = RootKey;
}
else if (ParentKey == NULL)
{
CurrentKey = RootKey;
}
else
{
CurrentKey = ParentKey;
}
/* Check whether current key is a link */
if (CurrentKey->DataType == REG_LINK)
{
CurrentKey = (FRLDRHKEY)CurrentKey->Data;
}
while (*KeyName != 0)
{
TRACE("KeyName '%S'\n", KeyName);
if (*KeyName == L'\\')
KeyName++;
p = wcschr(KeyName, L'\\');
if ((p != NULL) && (p != KeyName))
{
subkeyLength = p - KeyName;
stringLength = subkeyLength + 1;
name = KeyName;
}
else
{
subkeyLength = wcslen(KeyName);
stringLength = subkeyLength;
name = KeyName;
}
NameSize = (subkeyLength + 1) * sizeof(WCHAR);
Ptr = CurrentKey->SubKeyList.Flink;
CmpResult = 1;
while (Ptr != &CurrentKey->SubKeyList)
{
TRACE("Ptr 0x%x\n", Ptr);
SearchKey = CONTAINING_RECORD(Ptr, KEY, KeyList);
TRACE("SearchKey 0x%x\n", SearchKey);
TRACE("Searching '%S'\n", SearchKey->Name);
CmpResult = _wcsnicmp(SearchKey->Name, name, subkeyLength);
if (CmpResult == 0 && SearchKey->NameSize == NameSize) break;
else if (CmpResult == -1) break;
Ptr = Ptr->Flink;
}
if (CmpResult != 0)
{
/* no key found -> create new subkey */
NewKey = MmHeapAlloc(sizeof(KEY));
if (NewKey == NULL) return ERROR_OUTOFMEMORY;
InitializeListHead(&NewKey->SubKeyList);
InitializeListHead(&NewKey->ValueList);
NewKey->SubKeyCount = 0;
NewKey->ValueCount = 0;
NewKey->DataType = 0;
NewKey->DataSize = 0;
NewKey->Data = NULL;
InsertTailList(Ptr, &NewKey->KeyList);
CurrentKey->SubKeyCount++;
NewKey->NameSize = NameSize;
NewKey->Name = (PWCHAR)MmHeapAlloc(NewKey->NameSize);
if (NewKey->Name == NULL) return ERROR_OUTOFMEMORY;
memcpy(NewKey->Name, name, NewKey->NameSize - sizeof(WCHAR));
//.........这里部分代码省略.........
开发者ID:HBelusca,项目名称:NasuTek-Odyssey,代码行数:101,代码来源:registry.c
示例15: FatAllocateVolume
EFI_STATUS
FatAllocateVolume (
IN EFI_HANDLE Handle,
IN EFI_DISK_IO_PROTOCOL *DiskIo,
IN EFI_BLOCK_IO_PROTOCOL *BlockIo
)
/*++
Routine Description:
Allocates volume structure, detects FAT file system, installs protocol,
and initialize cache.
Arguments:
Handle - The handle of parent device.
DiskIo - The DiskIo of parent device.
BlockIo - The BlockIo of parent devicel
Returns:
EFI_SUCCESS - Allocate a new volume successfully.
EFI_OUT_OF_RESOURCES - Can not allocate the memory.
Others - Allocating a new volume failed.
--*/
{
EFI_STATUS Status;
FAT_VOLUME *Volume;
//
// Allocate a volume structure
//
Volume = AllocateZeroPool (sizeof (FAT_VOLUME));
if (Volume == NULL) {
return EFI_OUT_OF_RESOURCES;
}
//
// Initialize the structure
//
Volume->Signature = FAT_VOLUME_SIGNATURE;
Volume->Handle = Handle;
Volume->DiskIo = DiskIo;
Volume->BlockIo = BlockIo;
Volume->MediaId = BlockIo->Media->MediaId;
Volume->ReadOnly = BlockIo->Media->ReadOnly;
Volume->VolumeInterface.Revision = EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_REVISION;
Volume->VolumeInterface.OpenVolume = FatOpenVolume;
InitializeListHead (&Volume->CheckRef);
InitializeListHead (&Volume->DirCacheList);
//
// Initialize Root Directory entry
//
Volume->RootDirEnt.FileString = Volume->RootFileString;
Volume->RootDirEnt.Entry.Attributes = FAT_ATTRIBUTE_DIRECTORY;
//
// Check to see if t
|
请发表评论