Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Canonical Function Structure
Here is a proposed canonical structure for functions/procedures. Clearly in some cases some sections...
Date: 10/02/2006
The NT DLL Loader: FreeLibrary()
Let's review the loader's modus operandi and derive the (once again simple!) rules for what the heck...
Date: 06/29/2005
The NT DLL Loader: DLL_PROCESS_ATTACH reentrancy - wrap up
Hopefully the culmination of these cautionary tales is clear: you're walking a very fine line when...
Date: 06/28/2005
The NT DLL Loader: DLL_PROCESS_ATTACH reentrancy - step 4 - ramifications of questionable quality
Last time I alluded to the world of hurt you're in when the loader is reentered during...
Date: 06/28/2005
The NT DLL Loader: DLL_PROCESS_ATTACH reentrancy - step 3 - quality requirements
Now we're loaded for bear! We understand how PEs which are either launched via CreateProcess() or...
Date: 06/24/2005
The NT DLL Loader: DLL_PROCESS_ATTACH reentrancy - step 2 - GetProcAddress()
Last time we pondered what does LoadLibrary() do when called inside of a DLL_PROCESS_ATTACH callout....
Date: 06/23/2005
The NT DLL Loader: DLL_PROCESS_ATTACH reentrancy - step 1 - LoadLibrary()
So what happens if you call back into the loader when you're inside a loader callout (DllMain) for...
Date: 06/22/2005
The NT DLL Loader: reentrancy - play along at home!
Anyone care to hazard a guess about what happens if you have the following code in your DllMain()?...
Date: 06/22/2005
The NT DLL Loader: DLL callouts (DllMain) - DLL_PROCESS_ATTACH deadlocks
The Windows DLL loader (I wasn't around then but I assume some of this even comes from the days of...
Date: 06/21/2005
The NT DLL loader: dynamic unloads
To recap our story from last time: The NT DLL loader starts from some PE (either the main EXE or the...
Date: 06/19/2005
How the NT Loader works
My team maintained the NT loader (the component that loads DLLs) for about a year or so during...
Date: 06/18/2005
Enough about in-memory models and transactions for now
I want to follow up on this topic of transactional behavior in memory but to motivate it I'm going...
Date: 06/01/2005
Transactions and in-memory data (part 3 of n)
Last time I laid out a little framework for transactional rollback. It clearly is not sufficient for...
Date: 05/18/2005
Transactions and in-memory data (part 2 of n)
Buffering the opertations wasn't particularly successful. Let's look at maintaining a rollback log....
Date: 05/17/2005
Transactions and in-memory data (part 1 of n)
[Maybe I'll fill in the "n" when I'm done. I haven't had time to plan out the entire series...] In...
Date: 05/11/2005
No Chinese Dictionaries
I want to go on the record and note that I will not be deveoping a Chinese/English Dictionary, in...
Date: 05/11/2005
More than one way to skin a (transactional) cat
Let's briefly look at how databases deal with transaction rollback. I'm going to ignore a lot of...
Date: 05/10/2005
Implementation patterns to support transactional functions
Let's go back now to why I had a hard time with using the STL std::map pattern. It was because for...
Date: 05/10/2005
Local vs. global analysis revisited
I posted that last item before having my coffee so it's really not suprising that I forgot to get...
Date: 05/09/2005
Whole program vs. local analysis
A quick note for today. Maybe more tonight. Internally at Microsoft, as you can imagine, we have a...
Date: 05/09/2005
Working with inexact error contracts
Last time I lamented that the fact that std::map::erase() is not permitted to fail made it hard to...
Date: 05/08/2005
Even good design can't succeed in isolation
I tried three times to write yesterday's entry which was intended to explore the same problems with...
Date: 05/07/2005
Why is fclose()'s contract so confusing?
Because it’s a long established pattern and contract, let’s explore fclose() today. Here’s my ideal...
Date: 05/04/2005
What if close could fail?
Yesterday I made the claim that close() can’t fail in a meaningful way. Meaning that if it’s invoked...
Date: 05/03/2005
Function transactionality
A topic that comes up repeatedly in designing function is what a coworker of mine calls...
Date: 04/29/2005
Side-effects: a more useful definition
A typical CS-ish definition of whether a function has a side effect is whether the function modifies...
Date: 04/28/2005
Errors and a simple invariant
Before addressing the problems with close_resource(), I want to explore another avenue which is...
Date: 04/27/2005
Always check your return codes?
Is there a bug here? int do_work(char *psz) { some_type *p = NULL; int t; if ((t = foo(&p, psz))...
Date: 04/26/2005
Future examples - standards, conventions
I'm going to start blogging some more and I just wanted to be explicit, as Raymond is, about the...
Date: 04/26/2005
Versioning - source of all good or evil?
I don’t have a real succinct point tonight, just a long hopefully interesting rant/whine. I...
Date: 04/15/2004
catch considered harmful
Spot the bug: void CFoo::Bar() { m_array1[m_i++] = null; m_array2[m_j++] = null; } I’ll give...
Date: 02/18/2004
Gosh, programming is hard!
I've been programming since I was a wee tike of 9. Now, 28 years later, I'm amazed because while I...
Date: 02/10/2004
Here Goes!
I don't know what to think about this blogging thing but it seems like an interesting mechanism for...
Date: 02/10/2004