Reading Notebook: 16-September-09
Wednesday, September 16th, 2009Comments in italics are mine and express my own views, thoughts and opinions
Windows Internals by M. Russinovich, D. Solomon and A. Ionescu:
InitOnceExecuteOnce API, synchronous (p. 197) - new in Vista and W2K8, http://msdn.microsoft.com/en-us/library/ms683493(VS.85).aspx
InitOnceBeginInitialize / InitOnceComplete API, asynchronous (p. 197) - code examples for one-time initialization: http://msdn.microsoft.com/en-us/library/ms686934(VS.85).aspx
Dynamic worker threads (pp. 199 - 200)
ALPC (pp. 202 - 206) - ALPC is used extensively in terminal services environments. Here is the sample output from WinDbg to mine for ALPC wait chains in frozen systems and blocked services:Â
1: kd> !process 0 ff
[...]
THREAD fffffa8006ef7060 Cid 0350.279c Teb: 000007fffffa4000 Win32Thread: fffff900c22904f0 WAIT: (WrLpcReply) UserMode Non-Alertable
   fffffa8006ef73f0 Semaphore Limit 0x1
Waiting for reply to ALPC Message fffff880104eecf0 : queued at port fffffa80060d4c80 : owned by process fffffa8004c39040
IRP List:
   fffffa8006d21c60: (0006,03a0) Flags: 00060030 Mdl: 00000000
   fffffa8005f876c0: (0006,03a0) Flags: 00060030 Mdl: 00000000
Not impersonating
DeviceMap                fffff88000007450
Owning Process           fffffa80057844d0      Image:        svchost.exe
Attached Process         N/A           Image:        N/A
Wait Start TickCount     10908131      Ticks: 18864 (0:00:04:54.750)
Context Switch Count     12660                LargeStack
UserTime                 00:00:00.671
KernelTime               00:00:00.578
Win32 Start Address 0×000007fefe51fdec
Stack Init fffffa6006249db0 Current fffffa6006249670
Base fffffa600624a000 Limit fffffa6006243000 Call 0
Priority 13 BasePriority 8 PriorityDecrement 0 IoPriority 2 PagePriority 5
Child-SP         RetAddr          Call Site
fffffa60`062496b0 fffff800`016a36fa nt!KiSwapContext+0×7f
fffffa60`062497f0 fffff800`0169835b nt!KiSwapThread+0×13a
fffffa60`06249860 fffff800`016cd4e2 nt!KeWaitForSingleObject+0×2cb
fffffa60`062498f0 fffff800`01916d14 nt!AlpcpSignalAndWait+0×92
fffffa60`06249980 fffff800`019137a6 nt!AlpcpReceiveSynchronousReply+0×44
fffffa60`062499e0 fffff800`0190330f nt!AlpcpProcessSynchronousRequest+0×24f
fffffa60`06249b00 fffff800`016a0ef3 nt!NtAlpcSendWaitReceivePort+0×19f
fffffa60`06249bb0 00000000`774d756a nt!KiSystemServiceCopyEnd+0×13 (TrapFrame @ fffffa60`06249c20)
00000000`029decd8 00000000`00000000 0×774d756a
1: kd> !alpc /m fffff880104eecf0
Message @ fffff880104eecf0
 MessageID            : 0x053C (1340)
 CallbackID           : 0xC26264 (12739172)
 SequenceNumber       : 0x0000031F (799)
 Type                 : LPC_REQUEST
 DataLength           : 0x0048 (72)
 TotalLength          : 0x0070 (112)
 Canceled             : No
 Release              : No
 ReplyWaitReply       : No
 Continuation         : Yes
 OwnerPort            : fffffa800a7804d0 [ALPC_CLIENT_COMMUNICATION_PORT]
 WaitingThread        : fffffa8006ef7060
 QueueType            : ALPC_MSGQUEUE_PENDING
 QueuePort            : fffffa80060d4c80 [ALPC_CONNECTION_PORT]
 QueuePortOwnerProcess : fffffa8004c39040 (svchost.exe)
 ServerThread         : fffffa800aa8c700
 QuotaCharged         : No
 CancelQueuePort      : 0000000000000000
 CancelSequencePort   : 0000000000000000
 CancelSequenceNumber : 0×00000000 (0)
 ClientContext        : 0000000004e87390
 ServerContext        : 0000000000000000
 PortContext          : 0000000005615340
 CancelPortContext    : 0000000000000000
 SecurityData         : 0000000000000000
 View                 : 0000000000000000
1: kd> !alpc /p fffffa80060d4c80
Port @ fffffa80060d4c80
 Type                     : ALPC_CONNECTION_PORT
 CommunicationInfo        : fffff88007f66ba0
   ConnectionPort         : fffffa80060d4c80
   ClientCommunicationPort : 0000000000000000
   ServerCommunicationPort : 0000000000000000
 OwnerProcess             : fffffa8004c39040 (svchost.exe)
 SequenceNo               : 0x00000000 (0)
 CompletionPort           : fffffa80057d8040
 CompletionList           : 0000000000000000
 MessageZone              : 0000000000000000
 ConnectionPending        : No
 ConnectionRefused        : No
 Disconnected             : No
 Closed                   : No
 FlushOnClose             : Yes
 ReturnExtendedInfo       : No
 Waitable                 : No
 Security                 : Static
 Wow64CompletionList      : No
 Main queue is empty.
 Large message queue is empty.
 Pending queue has 192 message(s)
   fffff88012c7e030 0000201c 0000000000013f88:00000000000154fc 0000000000000000 fffffa8008573a30 LPC_CANCELED
   fffff88009a98cf0 0000221c 0000000000000b04:00000000000109b4 fffffa800b533bb0 fffffa8008ee7bb0 LPC_REQUEST
   fffff880129b9cf0 00001ffc 00000000000067d8:000000000000a85c fffffa800a032060 fffffa800a408060 LPC_REQUEST
   fffff8800ed62cf0 00001ea4 0000000000012c1c:0000000000013238 fffffa800afbcbb0 fffffa800bbf1060 LPC_REQUEST
   fffff88011fa7cf0 000014ec 0000000000000b04:0000000000013a38 fffffa80072c6bb0 fffffa800b4d2700 LPC_REQUEST
   fffff8801001e980 0000159c 000000000000b25c:0000000000003004 fffffa8006ebcbb0 fffffa8009c25060 LPC_REQUEST
   fffff88009a56cf0 00001f94 0000000000012940:0000000000015478 fffffa800a75d700 fffffa800b4b8060 LPC_REQUEST
[...]
   fffff880129aa640 000018f0 000000000000d31c:00000000000147c0 fffffa800ab9bbb0 fffffa8006ffb560 LPC_REQUEST
   fffff88008b29ac0 0000152c 000000000000fa5c:000000000000faa4 0000000000000000 fffffa800abadbb0 LPC_CANCELED
   fffff88009eaa460 000005dc 000000000000e13c:000000000000e3d4 fffffa800921b630 fffffa800a191060 LPC_REQUEST
 Canceled queue is empty.
The .NET Developer’s Guide to Windows Security by M. Brown:
Developing code in non-privileged way: two logons (p. 35)
whoami command (p. 37) - whoami /all
netsh command (p. 37)
runas /netonly (p. 39)
Nested runas commands (p. 40)
Debugger Users group (p. 41)Â
Run - install assumption (p. 46) - Got an idea for a bugtation: “You must assume that your program will be” coded “by one person and” debugged “by another!”
Least privilige for installer design (p. 46)
Software Requirements & Specifications by M. Jackson:
Indicative mood of formalizations (p. 9)
Application domain vs. generic domain and app. domain vs. environment (p. 9)
Structured Analysis of DeMArco / Gane / Sarson - the danger of thinking in terms of a machine when looking at the existing system (p. 10)
Costruction of difficulty from simplicity in software development, shorter vs. longer problem description spans (pp. 12 - 14) - lesson: create one structural UML diagram that covers all possible problem spans
Different views on the origin of software development disasters (pp. 14 - 15) - the view from memory dump analysis engineer: study crash dump analysis patterns (by applying bijectionism) and learn from them. Software artifacts are memory dumps. Software development is memory change.
Software technology as technology of description (p. 17)Â
- Dmitry Vostokov @ SoftwareGeneralist.com -