Writing WDF Drivers I: Core Concepts