lifeng
驱动牛犊
驱动牛犊
  • 注册日期2001-05-01
  • 最后登录2010-07-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1483回复:4

keinitializethread的原型

楼主#
更多 发布于:2003-02-15 13:40
有谁能说一下keinitializethread函数的原型
ooze
驱动牛犊
驱动牛犊
  • 注册日期2001-09-26
  • 最后登录2004-03-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-02-15 15:03
什么操作系统?
没见到这个函数呢?????
Be a true hacker of Windows NT alike
lifeng
驱动牛犊
驱动牛犊
  • 注册日期2001-05-01
  • 最后登录2010-07-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-02-16 17:54
w2k操作系统,属于ntoskrnl.exe中的函数,带有8个参数
slwqw
驱动大牛
驱动大牛
  • 注册日期2002-07-18
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望197点
  • 贡献值0点
  • 好评度147点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-02-16 22:09
严重声明:下面内容是从网上找到的,不保证其正确性!!!

KeInitializeThread(PKPROCESS Process, PKTHREAD Thread, BOOLEAN First);


KeInitializeThread(PKPROCESS Process, PKTHREAD Thread, BOOLEAN First)
/*
 * FUNCTION: Initialize the microkernel state of the thread
 */
{
  PVOID KernelStack;
  NTSTATUS Status;
  extern unsigned int init_stack_top;
  extern unsigned int init_stack;
  PMEMORY_AREA StackArea;
  ULONG i;
  
  KeInitializeDispatcherHeader(&Thread->DispatcherHeader,
      InternalThreadType,
      sizeof(ETHREAD),
      FALSE);
  InitializeListHead(&Thread->MutantListHead);
  if (!First)
    {
      KernelStack = NULL;
      
      MmLockAddressSpace(MmGetKernelAddressSpace());
      Status = MmCreateMemoryArea(NULL,
 MmGetKernelAddressSpace(),
 MEMORY_AREA_KERNEL_STACK,
 &KernelStack,
 MM_STACK_SIZE,
 0,
 &StackArea,
 FALSE);
      MmUnlockAddressSpace(MmGetKernelAddressSpace());
      
      if (!NT_SUCCESS(Status))
{
 DPRINT1(\"Failed to create thread stack\\n\");
 KeBugCheck(0);
}
      for (i = 0; i < (MM_STACK_SIZE / PAGE_SIZE); i++)
{
 PHYSICAL_ADDRESS Page;
 Status = MmRequestPageMemoryConsumer(MC_NPPOOL, TRUE, &Page);
 if (!NT_SUCCESS(Status))
   {
     KeBugCheck(0);
   }
 Status = MmCreateVirtualMapping(NULL,
 KernelStack + (i * PAGE_SIZE),
 PAGE_EXECUTE_READWRITE,
 Page,
 TRUE);
}
      Thread->InitialStack = KernelStack + MM_STACK_SIZE;
      Thread->StackBase = KernelStack + MM_STACK_SIZE;
      Thread->StackLimit = (ULONG)KernelStack;
      Thread->KernelStack = KernelStack + MM_STACK_SIZE;
    }
  else
    {
      Thread->InitialStack = (PVOID)&init_stack_top;
      Thread->StackBase = (PVOID)&init_stack_top;
      Thread->StackLimit = (ULONG)&init_stack;
      Thread->KernelStack = (PVOID)&init_stack_top;
    }
  
  /*
   * The Native API function will initialize the TEB field later
   */
  Thread->Teb = NULL;
  Thread->TlsArray = NULL;
  Thread->DebugActive = 0;
  Thread->State = THREAD_STATE_INITIALIZED;
  Thread->Alerted[0] = 0;
  Thread->Alerted[1] = 0;
  Thread->Iopl = 0;
  /*
   * FIXME: Think how this might work
   */
  Thread->NpxState = 0;
  
  Thread->Saturation = 0;
  Thread->Priority = 0;
  InitializeListHead(&Thread->ApcState.ApcListHead[0]);
  InitializeListHead(&Thread->ApcState.ApcListHead[1]);
  Thread->ApcState.Process = Process;
  Thread->ApcState.KernelApcInProgress = 0;
  Thread->ApcState.KernelApcPending = 0;
  Thread->ApcState.UserApcPending = 0;
  Thread->ContextSwitches = 0;
  Thread->WaitStatus = STATUS_SUCCESS;
  Thread->WaitIrql = 0;
  Thread->WaitMode = 0;
  Thread->WaitNext = 0;
  Thread->WaitBlockList = NULL;
  Thread->WaitListEntry.Flink = NULL;
  Thread->WaitListEntry.Blink = NULL;
  Thread->WaitTime = 0;
  Thread->BasePriority = 0;
  Thread->DecrementCount = 0;
  Thread->PriorityDecrement = 0;
  Thread->Quantum = 0;
  memset(Thread->WaitBlock, 0, sizeof(KWAIT_BLOCK)*4);
  Thread->LegoData = 0;
  /*
   * FIXME: Why this?
   */
  Thread->KernelApcDisable = 1;
  Thread->UserAffinity = Process->Affinity;
  Thread->SystemAffinityActive = 0;
  Thread->Queue = NULL;
  KeInitializeSpinLock(&Thread->ApcQueueLock);
  memset(&Thread->Timer, 0, sizeof(KTIMER));
  Thread->QueueListEntry.Flink = NULL;
  Thread->QueueListEntry.Blink = NULL;
  Thread->Affinity = Process->Affinity;
  Thread->Preempted = 0;
  Thread->ProcessReadyQueue = 0;
  Thread->KernelStackResident = 1;
  Thread->NextProcessor = 0;
  Thread->CallbackStack = NULL;
  Thread->Win32Thread = 0;
  Thread->TrapFrame = NULL;
  Thread->ApcStatePointer[0] = NULL;
  Thread->ApcStatePointer[1] = NULL;
  Thread->EnableStackSwap = 0;
  Thread->LargeStack = 0;
  Thread->ResourceIndex = 0;
  Thread->PreviousMode = KernelMode;
  Thread->KernelTime = 0;
  Thread->UserTime = 0;
  memset(&Thread->SavedApcState, 0, sizeof(KAPC_STATE));
  Thread->Alertable = 1;
  Thread->ApcStateIndex = 0;
  Thread->ApcQueueable = 0;
  Thread->AutoAlignment = 0;
  KeInitializeApc(&Thread->SuspendApc,
 Thread,
 0,
 PiSuspendThreadKernelRoutine,
 PiSuspendThreadRundownRoutine,
 PiSuspendThreadNormalRoutine,
 KernelMode,
 NULL);
  KeInitializeSemaphore(&Thread->SuspendSemaphore, 0, 128);
  Thread->ThreadListEntry.Flink = NULL;
  Thread->ThreadListEntry.Blink = NULL;
  Thread->FreezeCount = 0;
  Thread->SuspendCount = 0;
  
  /*
   * Initialize ReactOS specific members
   */
  Thread->ProcessThreadListEntry.Flink = NULL;
  Thread->ProcessThreadListEntry.Blink = NULL;
  
   /*
    * Do x86 specific part
    */
}

NTSTATUS
PsInitializeThread(HANDLE ProcessHandle,
  PETHREAD* ThreadPtr,
  PHANDLE ThreadHandle,
  ACCESS_MASK DesiredAccess,
  POBJECT_ATTRIBUTES ThreadAttributes,
  BOOLEAN First)
{
   ..............  
  
   KeInitializeThread(&Process->Pcb, &Thread->Tcb, First);
  
   Thread->ThreadsProcess = Process;
   ...............
  return(STATUS_SUCCESS);
}
lifeng
驱动牛犊
驱动牛犊
  • 注册日期2001-05-01
  • 最后登录2010-07-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-02-17 08:43
这是reactos的keinitializethread的原型,不是w2k的.
游客

返回顶部