|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH 01/21] xenvif: sync common helper files from xeniface and xenbus
Some common files shared between the drivers are already correctly
annotated in xeniface and xenbus.
They should be synced with xenvif.
Signed-off-by: Césaire Mounah <cesaire.mounah@xxxxxxxxxx>
---
include/cache_interface.h | 130 ++++++------
include/debug_interface.h | 88 ++++----
include/evtchn_interface.h | 136 ++++++------
include/gnttab_interface.h | 148 ++++++-------
include/store_interface.h | 84 ++++----
include/suspend_interface.h | 24 +--
src/xenvif/assert.h | 114 +++++-----
src/xenvif/dbg_print.h | 39 ++--
src/xenvif/names.h | 52 +++--
src/xenvif/registry.c | 412 ++++++++++++++++++++++++------------
src/xenvif/registry.h | 198 +++++++++--------
src/xenvif/thread.c | 36 ++--
src/xenvif/thread.h | 18 +-
src/xenvif/util.h | 102 +++++----
14 files changed, 886 insertions(+), 695 deletions(-)
diff --git a/include/cache_interface.h b/include/cache_interface.h
index 97fa315..e5f4ce9 100644
--- a/include/cache_interface.h
+++ b/include/cache_interface.h
@@ -1,32 +1,32 @@
/* Copyright (c) Xen Project.
* Copyright (c) Cloud Software Group, Inc.
* All rights reserved.
- *
- * Redistribution and use in source and binary forms,
- * with or without modification, are permitted provided
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
* that the following conditions are met:
- *
- * * Redistributions of source code must retain the above
- * copyright notice, this list of conditions and the
+ *
+ * * Redistributions of source code must retain the above
+ * copyright notice, this list of conditions and the
* following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the
- * following disclaimer in the documentation and/or other
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the
+ * following disclaimer in the documentation and/or other
* materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
@@ -51,20 +51,20 @@ typedef struct _XENBUS_CACHE XENBUS_CACHE,
*PXENBUS_CACHE;
\brief Acquire a reference to the CACHE interface
\param Interface The interface header
-*/
+*/
typedef NTSTATUS
(*XENBUS_CACHE_ACQUIRE)(
- IN PINTERFACE Interface
+ _In_ PINTERFACE Interface
);
/*! \typedef XENBUS_CACHE_RELEASE
\brief Release a reference to the CACHE interface
\param Interface The interface header
-*/
+*/
typedef VOID
(*XENBUS_CACHE_RELEASE)(
- IN PINTERFACE Interface
+ _In_ PINTERFACE Interface
);
/*! \typedef XENBUS_CACHE_CTOR
@@ -79,8 +79,8 @@ typedef VOID
*/
typedef NTSTATUS
(*XENBUS_CACHE_CTOR)(
- IN PVOID Argument,
- IN PVOID Object
+ _In_ PVOID Argument,
+ _In_ PVOID Object
);
/*! \typedef XENBUS_CACHE_DTOR
@@ -94,8 +94,8 @@ typedef NTSTATUS
*/
typedef VOID
(*XENBUS_CACHE_DTOR)(
- IN PVOID Argument,
- IN PVOID Object
+ _In_ PVOID Argument,
+ _In_ PVOID Object
);
/*! \typedef XENBUS_CACHE_ACQUIRE_LOCK
@@ -108,7 +108,7 @@ typedef VOID
*/
typedef VOID
(*XENBUS_CACHE_ACQUIRE_LOCK)(
- IN PVOID Argument
+ _In_ PVOID Argument
);
/*! \typedef XENBUS_CACHE_RELEASE_LOCK
@@ -121,21 +121,21 @@ typedef VOID
*/
typedef VOID
(*XENBUS_CACHE_RELEASE_LOCK)(
- IN PVOID Argument
+ _In_ PVOID Argument
);
typedef NTSTATUS
(*XENBUS_CACHE_CREATE_V1)(
- IN PINTERFACE Interface,
- IN const CHAR *Name,
- IN ULONG Size,
- IN ULONG Reservation,
- IN XENBUS_CACHE_CTOR Ctor,
- IN XENBUS_CACHE_DTOR Dtor,
- IN XENBUS_CACHE_ACQUIRE_LOCK AcquireLock,
- IN XENBUS_CACHE_RELEASE_LOCK ReleaseLock,
- IN PVOID Argument OPTIONAL,
- OUT PXENBUS_CACHE *Cache
+ _In_ PINTERFACE Interface,
+ _In_ PCSTR Name,
+ _In_ ULONG Size,
+ _In_ ULONG Reservation,
+ _In_ XENBUS_CACHE_CTOR Ctor,
+ _In_ XENBUS_CACHE_DTOR Dtor,
+ _In_ XENBUS_CACHE_ACQUIRE_LOCK AcquireLock,
+ _In_ XENBUS_CACHE_RELEASE_LOCK ReleaseLock,
+ _In_opt_ PVOID Argument,
+ _Outptr_ PXENBUS_CACHE *Cache
);
/*! \typedef XENBUS_CACHE_CREATE
@@ -155,20 +155,20 @@ typedef NTSTATUS
If a non-zero \a Reservation is specified then this method will fail
unless that number of objects can be immediately created.
-*/
+*/
typedef NTSTATUS
(*XENBUS_CACHE_CREATE)(
- IN PINTERFACE Interface,
- IN const CHAR *Name,
- IN ULONG Size,
- IN ULONG Reservation,
- IN ULONG Cap,
- IN XENBUS_CACHE_CTOR Ctor,
- IN XENBUS_CACHE_DTOR Dtor,
- IN XENBUS_CACHE_ACQUIRE_LOCK AcquireLock,
- IN XENBUS_CACHE_RELEASE_LOCK ReleaseLock,
- IN PVOID Argument OPTIONAL,
- OUT PXENBUS_CACHE *Cache
+ _In_ PINTERFACE Interface,
+ _In_ PCSTR Name,
+ _In_ ULONG Size,
+ _In_ ULONG Reservation,
+ _In_ ULONG Cap,
+ _In_ XENBUS_CACHE_CTOR Ctor,
+ _In_ XENBUS_CACHE_DTOR Dtor,
+ _In_ XENBUS_CACHE_ACQUIRE_LOCK AcquireLock,
+ _In_ XENBUS_CACHE_RELEASE_LOCK ReleaseLock,
+ _In_opt_ PVOID Argument,
+ _Outptr_ PXENBUS_CACHE *Cache
);
/*! \typedef XENBUS_CACHE_GET
@@ -181,9 +181,9 @@ typedef NTSTATUS
*/
typedef PVOID
(*XENBUS_CACHE_GET)(
- IN PINTERFACE Interface,
- IN PXENBUS_CACHE Cache,
- IN BOOLEAN Locked
+ _In_ PINTERFACE Interface,
+ _In_ PXENBUS_CACHE Cache,
+ _In_ BOOLEAN Locked
);
/*! \typedef XENBUS_CACHE_PUT
@@ -196,10 +196,10 @@ typedef PVOID
*/
typedef VOID
(*XENBUS_CACHE_PUT)(
- IN PINTERFACE Interface,
- IN PXENBUS_CACHE Cache,
- IN PVOID Object,
- IN BOOLEAN Locked
+ _In_ PINTERFACE Interface,
+ _In_ PXENBUS_CACHE Cache,
+ _In_ PVOID Object,
+ _In_ BOOLEAN Locked
);
/*! \typedef XENBUS_CACHE_DESTROY
@@ -212,12 +212,12 @@ typedef VOID
*/
typedef VOID
(*XENBUS_CACHE_DESTROY)(
- IN PINTERFACE Interface,
- IN PXENBUS_CACHE Cache
+ _In_ PINTERFACE Interface,
+ _In_ PXENBUS_CACHE Cache
);
// {A98DFD78-416A-4949-92A5-E084F2F4B44E}
-DEFINE_GUID(GUID_XENBUS_CACHE_INTERFACE,
+DEFINE_GUID(GUID_XENBUS_CACHE_INTERFACE,
0xa98dfd78, 0x416a, 0x4949, 0x92, 0xa5, 0xe0, 0x84, 0xf2, 0xf4, 0xb4, 0x4e);
/*! \struct _XENBUS_CACHE_INTERFACE_V1
diff --git a/include/debug_interface.h b/include/debug_interface.h
index 79729c7..251902c 100644
--- a/include/debug_interface.h
+++ b/include/debug_interface.h
@@ -1,32 +1,32 @@
/* Copyright (c) Xen Project.
* Copyright (c) Cloud Software Group, Inc.
* All rights reserved.
- *
- * Redistribution and use in source and binary forms,
- * with or without modification, are permitted provided
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
* that the following conditions are met:
- *
- * * Redistributions of source code must retain the above
- * copyright notice, this list of conditions and the
+ *
+ * * Redistributions of source code must retain the above
+ * copyright notice, this list of conditions and the
* following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the
- * following disclaimer in the documentation and/or other
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the
+ * following disclaimer in the documentation and/or other
* materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
@@ -50,20 +50,20 @@ typedef struct _XENBUS_DEBUG_CALLBACK
XENBUS_DEBUG_CALLBACK, *PXENBUS_DEBUG_CA
\brief Acquire a reference to the DEBUG interface
\param Interface The interface header
-*/
+*/
typedef NTSTATUS
(*XENBUS_DEBUG_ACQUIRE)(
- IN PINTERFACE Interface
+ _In_ PINTERFACE Interface
);
/*! \typedef XENBUS_DEBUG_RELEASE
\brief Release a reference to the DEBUG interface
\param Interface The interface header
-*/
+*/
typedef VOID
(*XENBUS_DEBUG_RELEASE)(
- IN PINTERFACE Interface
+ _In_ PINTERFACE Interface
);
/*! \typedef XENBUS_DEBUG_FUNCTION
@@ -74,11 +74,11 @@ typedef VOID
part of pre-crash logging
Debug callback functions are always invoked with IRQL == HIGH_LEVEL
-*/
+*/
typedef VOID
(*XENBUS_DEBUG_FUNCTION)(
- IN PVOID Argument,
- IN BOOLEAN Crashing
+ _In_ PVOID Argument,
+ _In_ BOOLEAN Crashing
);
/*! \typedef XENBUS_DEBUG_REGISTER
@@ -89,14 +89,14 @@ typedef VOID
\param Function The callback function
\param Argument An optional context argument passed to the callback
\param Callback A pointer to a callback handle to be initialized
-*/
+*/
typedef NTSTATUS
(*XENBUS_DEBUG_REGISTER)(
- IN PINTERFACE Interface,
- IN PCHAR Prefix,
- IN XENBUS_DEBUG_FUNCTION Function,
- IN PVOID Argument OPTIONAL,
- OUT PXENBUS_DEBUG_CALLBACK *Callback
+ _In_ PINTERFACE Interface,
+ _In_ PSTR Prefix,
+ _In_ XENBUS_DEBUG_FUNCTION Function,
+ _In_opt_ PVOID Argument,
+ _Outptr_ PXENBUS_DEBUG_CALLBACK *Callback
);
/*! \typedef XENBUS_DEBUG_PRINTF
@@ -108,11 +108,11 @@ typedef NTSTATUS
This method must only be invoked from the context of a debug
callback
-*/
+*/
typedef VOID
(*XENBUS_DEBUG_PRINTF)(
- IN PINTERFACE Interface,
- IN const CHAR *Format,
+ _In_ PINTERFACE Interface,
+ _In_ PCSTR Format,
...
);
@@ -124,8 +124,8 @@ typedef VOID
*/
typedef VOID
(*XENBUS_DEBUG_DEREGISTER)(
- IN PINTERFACE Interface,
- IN PXENBUS_DEBUG_CALLBACK Callback
+ _In_ PINTERFACE Interface,
+ _In_ PXENBUS_DEBUG_CALLBACK Callback
);
/*! \typedef XENBUS_DEBUG_TRIGGER
@@ -137,12 +137,12 @@ typedef VOID
*/
typedef VOID
(*XENBUS_DEBUG_TRIGGER)(
- IN PINTERFACE Interface,
- IN PXENBUS_DEBUG_CALLBACK Callback OPTIONAL
+ _In_ PINTERFACE Interface,
+ _In_opt_ PXENBUS_DEBUG_CALLBACK Callback
);
// {0DF600AE-6B20-4227-BF94-03DA9A26A114}
-DEFINE_GUID(GUID_XENBUS_DEBUG_INTERFACE,
+DEFINE_GUID(GUID_XENBUS_DEBUG_INTERFACE,
0xdf600ae, 0x6b20, 0x4227, 0xbf, 0x94, 0x3, 0xda, 0x9a, 0x26, 0xa1, 0x14);
/*! \struct _XENBUS_DEBUG_INTERFACE_V1
diff --git a/include/evtchn_interface.h b/include/evtchn_interface.h
index ef67487..5c46f97 100644
--- a/include/evtchn_interface.h
+++ b/include/evtchn_interface.h
@@ -1,32 +1,32 @@
/* Copyright (c) Xen Project.
* Copyright (c) Cloud Software Group, Inc.
* All rights reserved.
- *
- * Redistribution and use in source and binary forms,
- * with or without modification, are permitted provided
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
* that the following conditions are met:
- *
- * * Redistributions of source code must retain the above
- * copyright notice, this list of conditions and the
+ *
+ * * Redistributions of source code must retain the above
+ * copyright notice, this list of conditions and the
* following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the
- * following disclaimer in the documentation and/or other
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the
+ * following disclaimer in the documentation and/or other
* materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
@@ -54,27 +54,27 @@ typedef enum _XENBUS_EVTCHN_TYPE {
/*! \typedef XENBUS_EVTCHN_CHANNEL
\brief Event channel handle
-*/
+*/
typedef struct _XENBUS_EVTCHN_CHANNEL XENBUS_EVTCHN_CHANNEL,
*PXENBUS_EVTCHN_CHANNEL;
/*! \typedef XENBUS_EVTCHN_ACQUIRE
\brief Acquire a reference to the EVTCHN interface
\param Interface The interface header
-*/
+*/
typedef NTSTATUS
(*XENBUS_EVTCHN_ACQUIRE)(
- IN PINTERFACE Interface
+ _In_ PINTERFACE Interface
);
/*! \typedef XENBUS_EVTCHN_RELEASE
\brief Release a reference to the EVTCHN interface
\param Interface The interface header
-*/
+*/
typedef VOID
(*XENBUS_EVTCHN_RELEASE)(
- IN PINTERFACE Interface
+ _In_ PINTERFACE Interface
);
/*! \typedef XENBUS_EVTCHN_OPEN
@@ -105,13 +105,13 @@ typedef VOID
\param Number The relative number of the CPU that should handle the VIRQ
\return Event channel handle
-*/
+*/
typedef PXENBUS_EVTCHN_CHANNEL
(*XENBUS_EVTCHN_OPEN)(
- IN PINTERFACE Interface,
- IN XENBUS_EVTCHN_TYPE Type,
- IN PKSERVICE_ROUTINE Function,
- IN PVOID Argument OPTIONAL,
+ _In_ PINTERFACE Interface,
+ _In_ XENBUS_EVTCHN_TYPE Type,
+ _In_ PKSERVICE_ROUTINE Function,
+ _In_opt_ PVOID Argument,
...
);
@@ -125,17 +125,17 @@ typedef PXENBUS_EVTCHN_CHANNEL
*/
typedef NTSTATUS
(*XENBUS_EVTCHN_BIND)(
- IN PINTERFACE Interface,
- IN PXENBUS_EVTCHN_CHANNEL Channel,
- IN USHORT Group,
- IN UCHAR Number
+ _In_ PINTERFACE Interface,
+ _In_ PXENBUS_EVTCHN_CHANNEL Channel,
+ _In_ USHORT Group,
+ _In_ UCHAR Number
);
typedef VOID
(*XENBUS_EVTCHN_UNMASK_V4)(
- IN PINTERFACE Interface,
- IN PXENBUS_EVTCHN_CHANNEL Channel,
- IN BOOLEAN InCallback
+ _In_ PINTERFACE Interface,
+ _In_ PXENBUS_EVTCHN_CHANNEL Channel,
+ _In_ BOOLEAN InCallback
);
/*! \typedef XENBUS_EVTCHN_UNMASK
@@ -148,16 +148,16 @@ typedef VOID
*/
typedef BOOLEAN
(*XENBUS_EVTCHN_UNMASK)(
- IN PINTERFACE Interface,
- IN PXENBUS_EVTCHN_CHANNEL Channel,
- IN BOOLEAN InCallback,
- IN BOOLEAN Force
+ _In_ PINTERFACE Interface,
+ _In_ PXENBUS_EVTCHN_CHANNEL Channel,
+ _In_ BOOLEAN InCallback,
+ _In_ BOOLEAN Force
);
typedef VOID
(*XENBUS_EVTCHN_SEND_V1)(
- IN PINTERFACE Interface,
- IN PXENBUS_EVTCHN_CHANNEL Channel
+ _In_ PINTERFACE Interface,
+ _In_ PXENBUS_EVTCHN_CHANNEL Channel
);
/*! \typedef XENBUS_EVTCHN_SEND
@@ -168,11 +168,11 @@ typedef VOID
\param Interface The interface header
\param Channel The channel handle
-*/
+*/
typedef VOID
(*XENBUS_EVTCHN_SEND)(
- IN PINTERFACE Interface,
- IN PXENBUS_EVTCHN_CHANNEL Channel
+ _In_ PINTERFACE Interface,
+ _In_ PXENBUS_EVTCHN_CHANNEL Channel
);
/*! \typedef XENBUS_EVTCHN_TRIGGER
@@ -180,11 +180,11 @@ typedef VOID
\param Interface The interface header
\param Channel The channel handle
-*/
+*/
typedef VOID
(*XENBUS_EVTCHN_TRIGGER)(
- IN PINTERFACE Interface,
- IN PXENBUS_EVTCHN_CHANNEL Channel
+ _In_ PINTERFACE Interface,
+ _In_ PXENBUS_EVTCHN_CHANNEL Channel
);
/*! \typedef XENBUS_EVTCHN_GET_COUNT
@@ -196,15 +196,15 @@ typedef VOID
*/
typedef ULONG
(*XENBUS_EVTCHN_GET_COUNT)(
- IN PINTERFACE Interface,
- IN PXENBUS_EVTCHN_CHANNEL Channel
+ _In_ PINTERFACE Interface,
+ _In_ PXENBUS_EVTCHN_CHANNEL Channel
);
typedef NTSTATUS
(*XENBUS_EVTCHN_WAIT_V5)(
- IN PINTERFACE Interface,
- IN PXENBUS_EVTCHN_CHANNEL Channel,
- IN PLARGE_INTEGER Timeout OPTIONAL
+ _In_ PINTERFACE Interface,
+ _In_ PXENBUS_EVTCHN_CHANNEL Channel,
+ _In_opt_ PLARGE_INTEGER Timeout
);
/*! \typedef XENBUS_EVTCHN_WAIT
@@ -217,10 +217,10 @@ typedef NTSTATUS
*/
typedef NTSTATUS
(*XENBUS_EVTCHN_WAIT)(
- IN PINTERFACE Interface,
- IN PXENBUS_EVTCHN_CHANNEL Channel,
- IN ULONG Count,
- IN PLARGE_INTEGER Timeout OPTIONAL
+ _In_ PINTERFACE Interface,
+ _In_ PXENBUS_EVTCHN_CHANNEL Channel,
+ _In_ ULONG Count,
+ _In_opt_ PLARGE_INTEGER Timeout
);
/*! \typedef XENBUS_EVTCHN_GET_PORT
@@ -229,11 +229,11 @@ typedef NTSTATUS
\param Interface The interface header
\param Channel The channel handle
\return The port number
-*/
+*/
typedef ULONG
(*XENBUS_EVTCHN_GET_PORT)(
- IN PINTERFACE Interface,
- IN PXENBUS_EVTCHN_CHANNEL Channel
+ _In_ PINTERFACE Interface,
+ _In_ PXENBUS_EVTCHN_CHANNEL Channel
);
/*! \typedef XENBUS_EVTCHN_CLOSE
@@ -241,15 +241,15 @@ typedef ULONG
\param Interface The interface header
\param Channel The channel handle
-*/
+*/
typedef VOID
(*XENBUS_EVTCHN_CLOSE)(
- IN PINTERFACE Interface,
- IN PXENBUS_EVTCHN_CHANNEL Channel
+ _In_ PINTERFACE Interface,
+ _In_ PXENBUS_EVTCHN_CHANNEL Channel
);
// {BE2440AC-1098-4150-AF4D-452FADCEF923}
-DEFINE_GUID(GUID_XENBUS_EVTCHN_INTERFACE,
+DEFINE_GUID(GUID_XENBUS_EVTCHN_INTERFACE,
0xbe2440ac, 0x1098, 0x4150, 0xaf, 0x4d, 0x45, 0x2f, 0xad, 0xce, 0xf9, 0x23);
/*! \struct _XENBUS_EVTCHN_INTERFACE_V5
diff --git a/include/gnttab_interface.h b/include/gnttab_interface.h
index 4fc8f1f..41c8444 100644
--- a/include/gnttab_interface.h
+++ b/include/gnttab_interface.h
@@ -1,32 +1,32 @@
/* Copyright (c) Xen Project.
* Copyright (c) Cloud Software Group, Inc.
* All rights reserved.
- *
- * Redistribution and use in source and binary forms,
- * with or without modification, are permitted provided
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
* that the following conditions are met:
- *
- * * Redistributions of source code must retain the above
- * copyright notice, this list of conditions and the
+ *
+ * * Redistributions of source code must retain the above
+ * copyright notice, this list of conditions and the
* following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the
- * following disclaimer in the documentation and/or other
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the
+ * following disclaimer in the documentation and/or other
* materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
@@ -57,31 +57,31 @@ typedef struct _XENBUS_GNTTAB_CACHE XENBUS_GNTTAB_CACHE,
*PXENBUS_GNTTAB_CACHE;
\brief Acquire a reference to the GNTTAB interface
\param Interface The interface header
-*/
+*/
typedef NTSTATUS
(*XENBUS_GNTTAB_ACQUIRE)(
- IN PINTERFACE Interface
+ _In_ PINTERFACE Interface
);
/*! \typedef XENBUS_GNTTAB_RELEASE
\brief Release a reference to the GNTTAB interface
\param Interface The interface header
-*/
+*/
typedef VOID
(*XENBUS_GNTTAB_RELEASE)(
- IN PINTERFACE Interface
+ _In_ PINTERFACE Interface
);
typedef NTSTATUS
(*XENBUS_GNTTAB_CREATE_CACHE_V1)(
- IN PINTERFACE Interface,
- IN const CHAR *Name,
- IN ULONG Reservation,
- IN XENBUS_CACHE_ACQUIRE_LOCK AcquireLock,
- IN XENBUS_CACHE_RELEASE_LOCK ReleaseLock,
- IN PVOID Argument OPTIONAL,
- OUT PXENBUS_GNTTAB_CACHE *Cache
+ _In_ PINTERFACE Interface,
+ _In_ PCSTR Name,
+ _In_ ULONG Reservation,
+ _In_ XENBUS_CACHE_ACQUIRE_LOCK AcquireLock,
+ _In_ XENBUS_CACHE_RELEASE_LOCK ReleaseLock,
+ _In_opt_ PVOID Argument,
+ _Outptr_ PXENBUS_GNTTAB_CACHE *Cache
);
/*! \typedef XENBUS_GNTTAB_CREATE_CACHE
@@ -95,17 +95,17 @@ typedef NTSTATUS
\param ReleaseLock A callback invoked to release the spinlock
\param Argument An optional context argument passed to the callbacks
\param Cache A pointer to a grant table cache handle to be initialized
-*/
+*/
typedef NTSTATUS
(*XENBUS_GNTTAB_CREATE_CACHE)(
- IN PINTERFACE Interface,
- IN const CHAR *Name,
- IN ULONG Reservation,
- IN ULONG Cap,
- IN XENBUS_CACHE_ACQUIRE_LOCK AcquireLock,
- IN XENBUS_CACHE_RELEASE_LOCK ReleaseLock,
- IN PVOID Argument OPTIONAL,
- OUT PXENBUS_GNTTAB_CACHE *Cache
+ _In_ PINTERFACE Interface,
+ _In_ PCSTR Name,
+ _In_ ULONG Reservation,
+ _In_ ULONG Cap,
+ _In_ XENBUS_CACHE_ACQUIRE_LOCK AcquireLock,
+ _In_ XENBUS_CACHE_RELEASE_LOCK ReleaseLock,
+ _In_opt_ PVOID Argument,
+ _Outptr_ PXENBUS_GNTTAB_CACHE *Cache
);
/*! \typedef XENBUS_GNTTAB_PERMIT_FOREIGN_ACCESS
@@ -123,13 +123,13 @@ typedef NTSTATUS
*/
typedef NTSTATUS
(*XENBUS_GNTTAB_PERMIT_FOREIGN_ACCESS)(
- IN PINTERFACE Interface,
- IN PXENBUS_GNTTAB_CACHE Cache,
- IN BOOLEAN Locked,
- IN USHORT Domain,
- IN PFN_NUMBER Pfn,
- IN BOOLEAN ReadOnly,
- OUT PXENBUS_GNTTAB_ENTRY *Entry
+ _In_ PINTERFACE Interface,
+ _In_ PXENBUS_GNTTAB_CACHE Cache,
+ _In_ BOOLEAN Locked,
+ _In_ USHORT Domain,
+ _In_ PFN_NUMBER Pfn,
+ _In_ BOOLEAN ReadOnly,
+ _Outptr_ PXENBUS_GNTTAB_ENTRY *Entry
);
/*! \typedef XENBUS_GNTTAB_REVOKE_FOREIGN_ACCESS
@@ -143,10 +143,10 @@ typedef NTSTATUS
*/
typedef NTSTATUS
(*XENBUS_GNTTAB_REVOKE_FOREIGN_ACCESS)(
- IN PINTERFACE Interface,
- IN PXENBUS_GNTTAB_CACHE Cache,
- IN BOOLEAN Locked,
- IN PXENBUS_GNTTAB_ENTRY Entry
+ _In_ PINTERFACE Interface,
+ _In_ PXENBUS_GNTTAB_CACHE Cache,
+ _In_ BOOLEAN Locked,
+ _In_ PXENBUS_GNTTAB_ENTRY Entry
);
/*! \typedef XENBUS_GNTTAB_GET_REFERENCE
@@ -155,11 +155,11 @@ typedef NTSTATUS
\param Interface The interface header
\param Entry The grant table entry handle
\return The reference number
-*/
+*/
typedef ULONG
(*XENBUS_GNTTAB_GET_REFERENCE)(
- IN PINTERFACE Interface,
- IN PXENBUS_GNTTAB_ENTRY Entry
+ _In_ PINTERFACE Interface,
+ _In_ PXENBUS_GNTTAB_ENTRY Entry
);
/*! \typedef XENBUS_GNTTAB_QUERY_REFERENCE
@@ -172,10 +172,10 @@ typedef ULONG
*/
typedef NTSTATUS
(*XENBUS_GNTTAB_QUERY_REFERENCE)(
- IN PINTERFACE Interface,
- IN ULONG Reference,
- OUT PPFN_NUMBER Pfn OPTIONAL,
- OUT PBOOLEAN ReadOnly OPTIONAL
+ _In_ PINTERFACE Interface,
+ _In_ ULONG Reference,
+ _Out_opt_ PPFN_NUMBER Pfn,
+ _Out_opt_ PBOOLEAN ReadOnly
);
#define XENBUS_GNTTAB_CONSOLE_REFERENCE 0
@@ -189,12 +189,12 @@ typedef NTSTATUS
\param Cache The grant table cache handle
All grant table entries must have been revoked prior to destruction
- of the cache
-*/
+ of the cache
+*/
typedef VOID
(*XENBUS_GNTTAB_DESTROY_CACHE)(
- IN PINTERFACE Interface,
- IN PXENBUS_GNTTAB_CACHE Cache
+ _In_ PINTERFACE Interface,
+ _In_ PXENBUS_GNTTAB_CACHE Cache
);
/*! \typedef XENBUS_GNTTAB_MAP_FOREIGN_PAGES
@@ -210,12 +210,12 @@ typedef VOID
typedef NTSTATUS
(*XENBUS_GNTTAB_MAP_FOREIGN_PAGES)(
- IN PINTERFACE Interface,
- IN USHORT Domain,
- IN ULONG NumberPages,
- IN PULONG References,
- IN BOOLEAN ReadOnly,
- OUT PHYSICAL_ADDRESS *Address
+ _In_ PINTERFACE Interface,
+ _In_ USHORT Domain,
+ _In_ ULONG NumberPages,
+ _In_ PULONG References,
+ _In_ BOOLEAN ReadOnly,
+ _Out_ PHYSICAL_ADDRESS *Address
);
/*! \typedef XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES
@@ -226,12 +226,12 @@ typedef NTSTATUS
*/
typedef NTSTATUS
(*XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES)(
- IN PINTERFACE Interface,
- IN PHYSICAL_ADDRESS Address
+ _In_ PINTERFACE Interface,
+ _In_ PHYSICAL_ADDRESS Address
);
// {763679C5-E5C2-4A6D-8B88-6BB02EC42D8E}
-DEFINE_GUID(GUID_XENBUS_GNTTAB_INTERFACE,
+DEFINE_GUID(GUID_XENBUS_GNTTAB_INTERFACE,
0x763679c5, 0xe5c2, 0x4a6d, 0x8b, 0x88, 0x6b, 0xb0, 0x2e, 0xc4, 0x2d, 0x8e);
/*! \struct _XENBUS_GNTTAB_INTERFACE_V2
diff --git a/include/store_interface.h b/include/store_interface.h
index ca883bd..83a76a1 100644
--- a/include/store_interface.h
+++ b/include/store_interface.h
@@ -75,7 +75,7 @@ typedef struct _XENBUS_STORE_PERMISSION {
*/
typedef NTSTATUS
(*XENBUS_STORE_ACQUIRE)(
- IN PINTERFACE Interface
+ _In_ PINTERFACE Interface
);
/*! \typedef XENBUS_STORE_RELEASE
@@ -85,7 +85,7 @@ typedef NTSTATUS
*/
typedef VOID
(*XENBUS_STORE_RELEASE)(
- IN PINTERFACE Interface
+ _In_ PINTERFACE Interface
);
/*! \typedef XENBUS_STORE_FREE
@@ -96,8 +96,8 @@ typedef VOID
*/
typedef VOID
(*XENBUS_STORE_FREE)(
- IN PINTERFACE Interface,
- IN PCHAR Buffer
+ _In_ PINTERFACE Interface,
+ _In_ PSTR Buffer
);
/*! \typedef XENBUS_STORE_READ
@@ -116,11 +116,11 @@ typedef VOID
*/
typedef NTSTATUS
(*XENBUS_STORE_READ)(
- IN PINTERFACE Interface,
- IN PXENBUS_STORE_TRANSACTION Transaction OPTIONAL,
- IN PCHAR Prefix OPTIONAL,
- IN PCHAR Node,
- OUT PCHAR *Buffer
+ _In_ PINTERFACE Interface,
+ _In_opt_ PXENBUS_STORE_TRANSACTION Transaction,
+ _In_opt_ PSTR Prefix,
+ _In_ PSTR Node,
+ _Outptr_ PCHAR *Buffer
);
/*! \typedef XENBUS_STORE_PRINTF
@@ -139,11 +139,11 @@ typedef NTSTATUS
*/
typedef NTSTATUS
(*XENBUS_STORE_PRINTF)(
- IN PINTERFACE Interface,
- IN PXENBUS_STORE_TRANSACTION Transaction OPTIONAL,
- IN PCHAR Prefix OPTIONAL,
- IN PCHAR Node,
- IN const CHAR *Format,
+ _In_ PINTERFACE Interface,
+ _In_opt_ PXENBUS_STORE_TRANSACTION Transaction,
+ _In_opt_ PSTR Prefix,
+ _In_ PSTR Node,
+ _In_ PCSTR Format,
...
);
@@ -159,10 +159,10 @@ typedef NTSTATUS
*/
typedef NTSTATUS
(*XENBUS_STORE_REMOVE)(
- IN PINTERFACE Interface,
- IN PXENBUS_STORE_TRANSACTION Transaction OPTIONAL,
- IN PCHAR Prefix OPTIONAL,
- IN PCHAR Node
+ _In_ PINTERFACE Interface,
+ _In_opt_ PXENBUS_STORE_TRANSACTION Transaction,
+ _In_opt_ PSTR Prefix,
+ _In_ PSTR Node
);
/*! \typedef XENBUS_STORE_DIRECTORY
@@ -181,11 +181,11 @@ typedef NTSTATUS
*/
typedef NTSTATUS
(*XENBUS_STORE_DIRECTORY)(
- IN PINTERFACE Interface,
- IN PXENBUS_STORE_TRANSACTION Transaction OPTIONAL,
- IN PCHAR Prefix OPTIONAL,
- IN PCHAR Node,
- OUT PCHAR *Buffer
+ _In_ PINTERFACE Interface,
+ _In_opt_ PXENBUS_STORE_TRANSACTION Transaction,
+ _In_opt_ PSTR Prefix,
+ _In_ PSTR Node,
+ _Outptr_ PCHAR *Buffer
);
/*! \typedef XENBUS_STORE_TRANSACTION_START
@@ -196,8 +196,8 @@ typedef NTSTATUS
*/
typedef NTSTATUS
(*XENBUS_STORE_TRANSACTION_START)(
- IN PINTERFACE Interface,
- OUT PXENBUS_STORE_TRANSACTION *Transaction
+ _In_ PINTERFACE Interface,
+ _Outptr_ PXENBUS_STORE_TRANSACTION *Transaction
);
/*! \typedef XENBUS_STORE_TRANSACTION_END
@@ -213,9 +213,9 @@ typedef NTSTATUS
*/
typedef NTSTATUS
(*XENBUS_STORE_TRANSACTION_END)(
- IN PINTERFACE Interface,
- IN PXENBUS_STORE_TRANSACTION Transaction,
- IN BOOLEAN Commit
+ _In_ PINTERFACE Interface,
+ _In_ PXENBUS_STORE_TRANSACTION Transaction,
+ _In_ BOOLEAN Commit
);
/*! \typedef XENBUS_STORE_WATCH_ADD
@@ -231,11 +231,11 @@ typedef NTSTATUS
*/
typedef NTSTATUS
(*XENBUS_STORE_WATCH_ADD)(
- IN PINTERFACE Interface,
- IN PCHAR Prefix OPTIONAL,
- IN PCHAR Node,
- IN PKEVENT Event,
- OUT PXENBUS_STORE_WATCH *Watch
+ _In_ PINTERFACE Interface,
+ _In_opt_ PSTR Prefix,
+ _In_ PSTR Node,
+ _In_ PKEVENT Event,
+ _Outptr_ PXENBUS_STORE_WATCH *Watch
);
/*! \typedef XENBUS_STORE_WATCH_REMOVE
@@ -246,8 +246,8 @@ typedef NTSTATUS
*/
typedef NTSTATUS
(*XENBUS_STORE_WATCH_REMOVE)(
- IN PINTERFACE Interface,
- IN PXENBUS_STORE_WATCH Watch
+ _In_ PINTERFACE Interface,
+ _In_opt_ PXENBUS_STORE_WATCH Watch
);
/*! \typedef XENBUS_STORE_POLL
@@ -262,7 +262,7 @@ typedef NTSTATUS
*/
typedef VOID
(*XENBUS_STORE_POLL)(
- IN PINTERFACE Interface
+ _In_ PINTERFACE Interface
);
/*! \typedef XENBUS_STORE_PERMISSIONS_SET
@@ -279,12 +279,12 @@ typedef VOID
*/
typedef NTSTATUS
(*XENBUS_STORE_PERMISSIONS_SET)(
- IN PINTERFACE Interface,
- IN PXENBUS_STORE_TRANSACTION Transaction OPTIONAL,
- IN PCHAR Prefix OPTIONAL,
- IN PCHAR Node,
- IN PXENBUS_STORE_PERMISSION Permissions,
- IN ULONG NumberPermissions
+ _In_ PINTERFACE Interface,
+ _In_opt_ PXENBUS_STORE_TRANSACTION Transaction,
+ _In_opt_ PSTR Prefix,
+ _In_ PSTR Node,
+ _In_ PXENBUS_STORE_PERMISSION Permissions,
+ _In_ ULONG NumberPermissions
);
// {86824C3B-D34E-4753-B281-2F1E3AD214D7}
diff --git a/include/suspend_interface.h b/include/suspend_interface.h
index 4176dc3..414bca5 100644
--- a/include/suspend_interface.h
+++ b/include/suspend_interface.h
@@ -62,7 +62,7 @@ typedef struct _XENBUS_SUSPEND_CALLBACK
XENBUS_SUSPEND_CALLBACK, *PXENBUS_SUSP
*/
typedef NTSTATUS
(*XENBUS_SUSPEND_ACQUIRE)(
- IN PINTERFACE Interface
+ _In_ PINTERFACE Interface
);
/*! \typedef XENBUS_SUSPEND_RELEASE
@@ -72,7 +72,7 @@ typedef NTSTATUS
*/
typedef VOID
(*XENBUS_SUSPEND_RELEASE)(
- IN PINTERFACE Interface
+ _In_ PINTERFACE Interface
);
/*! \typedef XENBUS_SUSPEND_FUNCTION
@@ -87,7 +87,7 @@ typedef VOID
*/
typedef VOID
(*XENBUS_SUSPEND_FUNCTION)(
- IN PVOID Argument
+ _In_ PVOID Argument
);
/*! \typedef XENBUS_SUSPEND_REGISTER
@@ -101,11 +101,11 @@ typedef VOID
*/
typedef NTSTATUS
(*XENBUS_SUSPEND_REGISTER)(
- IN PINTERFACE Interface,
- IN XENBUS_SUSPEND_CALLBACK_TYPE Type,
- IN XENBUS_SUSPEND_FUNCTION Function,
- IN PVOID Argument OPTIONAL,
- OUT PXENBUS_SUSPEND_CALLBACK *Callback
+ _In_ PINTERFACE Interface,
+ _In_ XENBUS_SUSPEND_CALLBACK_TYPE Type,
+ _In_ XENBUS_SUSPEND_FUNCTION Function,
+ _In_opt_ PVOID Argument,
+ _Outptr_ PXENBUS_SUSPEND_CALLBACK *Callback
);
/*! \typedef XENBUS_SUSPEND_DEREGISTER
@@ -116,8 +116,8 @@ typedef NTSTATUS
*/
typedef VOID
(*XENBUS_SUSPEND_DEREGISTER)(
- IN PINTERFACE Interface,
- IN PXENBUS_SUSPEND_CALLBACK Callback
+ _In_ PINTERFACE Interface,
+ _In_ PXENBUS_SUSPEND_CALLBACK Callback
);
/*! \typedef XENBUS_SUSPEND_TRIGGER
@@ -129,7 +129,7 @@ typedef VOID
*/
typedef NTSTATUS
(*XENBUS_SUSPEND_TRIGGER)(
- IN PINTERFACE Interface
+ _In_ PINTERFACE Interface
);
/*! \typedef XENBUS_SUSPEND_GET_COUNT
@@ -140,7 +140,7 @@ typedef NTSTATUS
*/
typedef ULONG
(*XENBUS_SUSPEND_GET_COUNT)(
- IN PINTERFACE Interface
+ _In_ PINTERFACE Interface
);
// {0554F2AF-B510-4C71-AC03-1C503E394238}
diff --git a/src/xenvif/assert.h b/src/xenvif/assert.h
index c41dfed..e3b2c49 100644
--- a/src/xenvif/assert.h
+++ b/src/xenvif/assert.h
@@ -1,32 +1,32 @@
/* Copyright (c) Xen Project.
* Copyright (c) Cloud Software Group, Inc.
* All rights reserved.
- *
- * Redistribution and use in source and binary forms,
- * with or without modification, are permitted provided
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
* that the following conditions are met:
- *
- * * Redistributions of source code must retain the above
- * copyright notice, this list of conditions and the
+ *
+ * * Redistributions of source code must retain the above
+ * copyright notice, this list of conditions and the
* following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the
- * following disclaimer in the documentation and/or other
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the
+ * following disclaimer in the documentation and/or other
* materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
@@ -39,11 +39,11 @@
static FORCEINLINE VOID
__Bug(
- IN ULONG Code,
- IN ULONG_PTR Parameter1,
- IN ULONG_PTR Parameter2,
- IN ULONG_PTR Parameter3,
- IN ULONG_PTR Parameter4
+ _In_ ULONG Code,
+ _In_ ULONG_PTR Parameter1,
+ _In_ ULONG_PTR Parameter2,
+ _In_ ULONG_PTR Parameter3,
+ _In_ ULONG_PTR Parameter4
)
{
#pragma prefast(suppress:28159)
@@ -58,8 +58,8 @@ __Bug(
#define BUG(_TEXT) \
do { \
- const CHAR *_Text = (_TEXT); \
- const CHAR *_File = __FILE__; \
+ PCSTR _Text = (_TEXT); \
+ PCSTR _File = __FILE__; \
ULONG _Line = __LINE__; \
\
Error("BUG: " _TEXT "\n"); \
@@ -77,17 +77,19 @@ __Bug(
#if DBG
-#define __ASSERT_FAIL(_EXP) \
+#define __NT_ASSERT(_EXP) \
+ ((!(_EXP)) ? \
(Error("ASSERTION FAILED: " #_EXP "\n"), \
__annotation(L"Debug", L"AssertFail", L#_EXP), \
- DbgRaiseAssertionFailure())
-
-#define ASSERT(_EXP) \
- do { \
- if (!(_EXP)) { \
- __ASSERT_FAIL(_EXP); \
- __analysis_assume(_EXP); \
- } \
+ DbgRaiseAssertionFailure(), FALSE) : \
+ TRUE)
+
+#define __ASSERT(_EXP) __NT_ASSERT(_EXP)
+
+#define ASSERT(_EXP) \
+ do { \
+ __ASSERT(_EXP); \
+ _Analysis_assume_(_EXP); \
} while (FALSE)
#define ASSERT3U(_X, _OP, _Y) \
@@ -97,8 +99,7 @@ __Bug(
if (!(_Lval _OP _Rval)) { \
Error("%s = %llu\n", #_X, _Lval); \
Error("%s = %llu\n", #_Y, _Rval); \
- __ASSERT_FAIL(_X _OP _Y); \
- __analysis_assume(_Lval _OP _Rval); \
+ ASSERT((_X) _OP (_Y)); \
} \
} while (FALSE)
@@ -109,8 +110,7 @@ __Bug(
if (!(_Lval _OP _Rval)) { \
Error("%s = %lld\n", #_X, _Lval); \
Error("%s = %lld\n", #_Y, _Rval); \
- __ASSERT_FAIL(_X _OP _Y); \
- __analysis_assume(_Lval _OP _Rval); \
+ ASSERT((_X) _OP (_Y)); \
} \
} while (FALSE)
@@ -121,8 +121,7 @@ __Bug(
if (!(_Lval _OP _Rval)) { \
Error("%s = %p\n", #_X, _Lval); \
Error("%s = %p\n", #_Y, _Rval); \
- __ASSERT_FAIL(_X _OP _Y); \
- __analysis_assume(_Lval _OP _Rval); \
+ ASSERT((_X) _OP (_Y)); \
} \
} while (FALSE)
@@ -133,17 +132,17 @@ __Bug(
#define ASSERT(_EXP) \
do { \
- __analysis_assume(_EXP); \
+ _Analysis_assume_(_EXP); \
} while (FALSE)
#define ASSERT3U(_X, _OP, _Y) \
- ASSERT((ULONGLONG)(_X) _OP (ULONGLONG)(_Y))
+ ASSERT((_X) _OP (_Y))
#define ASSERT3S(_X, _OP, _Y) \
- ASSERT((LONGLONG)(_X) _OP (LONGLONG)(_Y))
+ ASSERT((_X) _OP (_Y))
#define ASSERT3P(_X, _OP, _Y) \
- ASSERT((PVOID)(_X) _OP (PVOID)(_Y))
+ ASSERT((_X) _OP (_Y))
#endif // DBG
@@ -155,10 +154,10 @@ __Bug(
static __inline BOOLEAN
_IsZeroMemory(
- IN const PCHAR Caller,
- IN const PCHAR Name,
- IN PVOID Buffer,
- IN ULONG Length
+ _In_ PCSTR Caller,
+ _In_ PCSTR Name,
+ _In_ PVOID Buffer,
+ _In_ ULONG Length
)
{
ULONG Offset;
@@ -179,10 +178,10 @@ _IsZeroMemory(
static __inline BOOLEAN
_IsZeroMemory(
- IN const PCHAR Caller,
- IN const PCHAR Name,
- IN PVOID Buffer,
- IN ULONG Length
+ _In_ PCSTR Caller,
+ _In_ PCSTR Name,
+ _In_ PVOID Buffer,
+ _In_ ULONG Length
)
{
UNREFERENCED_PARAMETER(Caller);
@@ -202,3 +201,4 @@ _IsZeroMemory(
#define EQUIV(_X, _Y) (IMPLY((_X), (_Y)) && IMPLY((_Y), (_X)))
#endif // _XENVIF_ASSERT_H
+
\ No newline at end of file
diff --git a/src/xenvif/dbg_print.h b/src/xenvif/dbg_print.h
index e39a50c..21bea0c 100644
--- a/src/xenvif/dbg_print.h
+++ b/src/xenvif/dbg_print.h
@@ -36,16 +36,16 @@
#include <ntddk.h>
#include <stdarg.h>
+#pragma warning(disable:4127) // conditional expression is constant
+
#define stringify_literal(_text) #_text
#define stringify(_text) stringify_literal(_text)
#define __MODULE__ stringify(PROJECT)
-#pragma warning(disable:4127) // conditional expression is constant
-
static __inline VOID
__Error(
- IN const CHAR *Prefix,
- IN const CHAR *Format,
+ _In_ PCSTR Prefix,
+ _In_ PCSTR Format,
...
)
{
@@ -67,8 +67,8 @@ __Error(
static __inline VOID
__Warning(
- IN const CHAR *Prefix,
- IN const CHAR *Format,
+ _In_ PCSTR Prefix,
+ _In_ PCSTR Format,
...
)
{
@@ -89,11 +89,10 @@ __Warning(
__Warning(__MODULE__ "|" __FUNCTION__ ": ", __VA_ARGS__)
#if DBG
-
static __inline VOID
__Trace(
- IN const CHAR *Prefix,
- IN const CHAR *Format,
+ _In_ PCSTR Prefix,
+ _In_ PCSTR Format,
...
)
{
@@ -110,28 +109,16 @@ __Trace(
va_end(Arguments);
}
-#else // DBG
-
-static __inline VOID
-__Trace(
- IN const CHAR *Prefix,
- IN const CHAR *Format,
- ...
- )
-{
- UNREFERENCED_PARAMETER(Prefix);
- UNREFERENCED_PARAMETER(Format);
-}
-
-#endif // DBG
-
#define Trace(...) \
__Trace(__MODULE__ "|" __FUNCTION__ ": ", __VA_ARGS__)
+#else // DBG
+#define Trace(...) (VOID)(__VA_ARGS__)
+#endif // DBG
static __inline VOID
__Info(
- IN const CHAR *Prefix,
- IN const CHAR *Format,
+ _In_ PCSTR Prefix,
+ _In_ PCSTR Format,
...
)
{
diff --git a/src/xenvif/names.h b/src/xenvif/names.h
index 9f8ff91..bbd1517 100644
--- a/src/xenvif/names.h
+++ b/src/xenvif/names.h
@@ -36,14 +36,16 @@
#include <ntddk.h>
#include <xen.h>
+#include "types.h"
+
static FORCEINLINE const CHAR *
PowerTypeName(
- IN POWER_STATE_TYPE Type
+ _In_ POWER_STATE_TYPE Type
)
{
#define _POWER_TYPE_NAME(_Type) \
case _Type: \
- return #_Type;
+ return #_Type;
switch (Type) {
_POWER_TYPE_NAME(SystemPowerState);
@@ -58,12 +60,12 @@ PowerTypeName(
static FORCEINLINE const CHAR *
PowerSystemStateName(
- IN SYSTEM_POWER_STATE State
+ _In_ SYSTEM_POWER_STATE State
)
{
#define _POWER_SYSTEM_STATE_NAME(_State) \
case PowerSystem ## _State: \
- return #_State;
+ return #_State;
switch (State) {
_POWER_SYSTEM_STATE_NAME(Unspecified);
@@ -84,7 +86,7 @@ PowerSystemStateName(
static FORCEINLINE const CHAR *
PowerDeviceStateName(
- IN DEVICE_POWER_STATE State
+ _In_ DEVICE_POWER_STATE State
)
{
#define _POWER_DEVICE_STATE_NAME(_State) \
@@ -108,12 +110,12 @@ PowerDeviceStateName(
static FORCEINLINE const CHAR *
PowerActionName(
- IN POWER_ACTION Type
+ _In_ POWER_ACTION Type
)
{
#define _POWER_ACTION_NAME(_Type) \
case PowerAction ## _Type: \
- return #_Type;
+ return #_Type;
switch (Type) {
_POWER_ACTION_NAME(None);
@@ -134,7 +136,7 @@ PowerActionName(
static FORCEINLINE const CHAR *
PowerMinorFunctionName(
- IN ULONG MinorFunction
+ _In_ ULONG MinorFunction
)
{
#define _POWER_MINOR_FUNCTION_NAME(_Function) \
@@ -146,18 +148,44 @@ PowerMinorFunctionName(
_POWER_MINOR_FUNCTION_NAME(POWER_SEQUENCE);
_POWER_MINOR_FUNCTION_NAME(SET_POWER);
_POWER_MINOR_FUNCTION_NAME(QUERY_POWER);
+
+ default:
+ return "UNKNOWN";
+ }
+
+#undef _POWER_MINOR_FUNCTION_NAME
+}
+
+static FORCEINLINE const CHAR *
+PnpDeviceStateName(
+ _In_ DEVICE_PNP_STATE State
+ )
+{
+#define _PNP_DEVICE_STATE_NAME(_State) \
+ case _State: \
+ return #_State;
+
+ switch (State) {
+ _PNP_DEVICE_STATE_NAME(Invalid);
+ _PNP_DEVICE_STATE_NAME(Added);
+ _PNP_DEVICE_STATE_NAME(Started);
+ _PNP_DEVICE_STATE_NAME(StopPending);
+ _PNP_DEVICE_STATE_NAME(Stopped);
+ _PNP_DEVICE_STATE_NAME(RemovePending);
+ _PNP_DEVICE_STATE_NAME(SurpriseRemovePending);
+ _PNP_DEVICE_STATE_NAME(Deleted);
default:
break;
}
return "UNKNOWN";
-#undef _POWER_MINOR_FUNCTION_NAME
+#undef _STATE_NAME
}
static FORCEINLINE const CHAR *
PnpMinorFunctionName(
- IN ULONG Function
+ _In_ ULONG Function
)
{
#define _PNP_MINOR_FUNCTION_NAME(_Function) \
@@ -200,7 +228,7 @@ PnpMinorFunctionName(
static FORCEINLINE const CHAR *
PartialResourceDescriptorTypeName(
- IN UCHAR Type
+ _In_ UCHAR Type
)
{
#define _PARTIAL_RESOURCE_DESCRIPTOR_TYPE_NAME(_Type) \
@@ -229,7 +257,7 @@ PartialResourceDescriptorTypeName(
static FORCEINLINE const CHAR *
DeviceUsageTypeName(
- IN DEVICE_USAGE_NOTIFICATION_TYPE Type
+ _In_ DEVICE_USAGE_NOTIFICATION_TYPE Type
)
{
#define _DEVICE_USAGE_TYPE_NAME(_Type) \
diff --git a/src/xenvif/registry.c b/src/xenvif/registry.c
index e498497..09b61cd 100644
--- a/src/xenvif/registry.c
+++ b/src/xenvif/registry.c
@@ -1,32 +1,32 @@
/* Copyright (c) Xen Project.
* Copyright (c) Cloud Software Group, Inc.
* All rights reserved.
- *
- * Redistribution and use in source and binary forms,
- * with or without modification, are permitted provided
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
* that the following conditions are met:
- *
- * * Redistributions of source code must retain the above
- * copyright notice, this list of conditions and the
+ *
+ * * Redistributions of source code must retain the above
+ * copyright notice, this list of conditions and the
* following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the
- * following disclaimer in the documentation and/or other
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the
+ * following disclaimer in the documentation and/or other
* materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
@@ -38,11 +38,16 @@
#define REGISTRY_TAG 'GERX'
+static PDRIVER_OBJECT RegistryDriverObject;
static UNICODE_STRING RegistryPath;
+typedef NTSTATUS(*IOOPENDRIVERREGISTRYKEY)(PDRIVER_OBJECT, DRIVER_REGKEY_TYPE,
ACCESS_MASK, ULONG, PHANDLE);
+
+static IOOPENDRIVERREGISTRYKEY __IoOpenDriverRegistryKey;
+
static FORCEINLINE PVOID
__RegistryAllocate(
- IN ULONG Length
+ _In_ ULONG Length
)
{
return __AllocatePoolWithTag(NonPagedPool, Length, REGISTRY_TAG);
@@ -50,7 +55,7 @@ __RegistryAllocate(
static FORCEINLINE VOID
__RegistryFree(
- IN PVOID Buffer
+ _In_ PVOID Buffer
)
{
__FreePoolWithTag(Buffer, REGISTRY_TAG);
@@ -58,10 +63,10 @@ __RegistryFree(
NTSTATUS
RegistryInitialize(
- IN PUNICODE_STRING Path
+ _In_ PUNICODE_STRING Path
)
{
- NTSTATUS status;
+ NTSTATUS status;
ASSERT3P(RegistryPath.Buffer, ==, NULL);
@@ -82,17 +87,69 @@ RegistryTeardown(
VOID
)
{
+ __IoOpenDriverRegistryKey = NULL;
+
+ RegistryDriverObject = NULL;
+
RtlFreeUnicodeString(&RegistryPath);
RegistryPath.Buffer = NULL;
RegistryPath.MaximumLength = RegistryPath.Length = 0;
}
+NTSTATUS
+RegistryOpenParametersKey(
+ _In_ ACCESS_MASK DesiredAccess,
+ _Out_ PHANDLE Key
+ )
+{
+ HANDLE ServiceKey;
+ NTSTATUS status;
+
+ if (__IoOpenDriverRegistryKey != NULL) {
+ status = __IoOpenDriverRegistryKey(RegistryDriverObject,
+ DriverRegKeyParameters,
+ DesiredAccess,
+ 0,
+ Key);
+ if (!NT_SUCCESS(status))
+ goto fail1;
+
+ goto done;
+ }
+
+ status = RegistryOpenKey(NULL, &RegistryPath, DesiredAccess, &ServiceKey);
+ if (!NT_SUCCESS(status))
+ goto fail2;
+
+ status = RegistryOpenSubKey(ServiceKey, "Parameters", DesiredAccess, Key);
+ if (!NT_SUCCESS(status))
+ goto fail3;
+
+ RegistryCloseKey(ServiceKey);
+
+done:
+ return STATUS_SUCCESS;
+
+fail3:
+ Error("fail3\n");
+
+ RegistryCloseKey(ServiceKey);
+
+fail2:
+ Error("fail2\n");
+
+fail1:
+ Error("fail1 %08x\n", status);
+
+ return status;
+}
+
NTSTATUS
RegistryOpenKey(
- IN HANDLE Parent,
- IN PUNICODE_STRING Path,
- IN ACCESS_MASK DesiredAccess,
- OUT PHANDLE Key
+ _In_opt_ HANDLE Parent,
+ _In_ PUNICODE_STRING Path,
+ _In_ ACCESS_MASK DesiredAccess,
+ _Out_ PHANDLE Key
)
{
OBJECT_ATTRIBUTES Attributes;
@@ -118,15 +175,15 @@ fail1:
static NTSTATUS
RegistryOpenRoot(
- IN PWCHAR Path,
- OUT PHANDLE Parent,
- OUT PWCHAR *ChildPath
+ _In_ PWSTR Path,
+ _Out_ PHANDLE Parent,
+ _Outptr_result_z_ PWSTR *ChildPath
)
{
- const WCHAR Prefix[] = L"\\Registry\\Machine\\";
- ULONG Length;
- UNICODE_STRING Unicode;
- NTSTATUS status;
+ PCWSTR Prefix = L"\\Registry\\Machine\\";
+ ULONG Length;
+ UNICODE_STRING Unicode;
+ NTSTATUS status;
Length = (ULONG)wcslen(Prefix);
@@ -151,17 +208,17 @@ fail1:
NTSTATUS
RegistryCreateKey(
- IN HANDLE Parent,
- IN PUNICODE_STRING Path,
- IN ULONG Options,
- OUT PHANDLE Key
+ _In_opt_ HANDLE Parent,
+ _In_ PUNICODE_STRING Path,
+ _In_ ULONG Options,
+ _Out_ PHANDLE Key
)
{
- PWCHAR Buffer;
+ PWSTR Buffer;
HANDLE Root;
- PWCHAR ChildPath;
- PWCHAR ChildName;
- PWCHAR Context;
+ PWSTR ChildPath;
+ PWSTR ChildName;
+ PWSTR Context;
HANDLE Child;
NTSTATUS status;
@@ -251,8 +308,8 @@ fail1:
NTSTATUS
RegistryOpenServiceKey(
- IN ACCESS_MASK DesiredAccess,
- OUT PHANDLE Key
+ _In_ ACCESS_MASK DesiredAccess,
+ _Out_ PHANDLE Key
)
{
return RegistryOpenKey(NULL, &RegistryPath, DesiredAccess, Key);
@@ -260,7 +317,7 @@ RegistryOpenServiceKey(
NTSTATUS
RegistryCreateServiceKey(
- OUT PHANDLE Key
+ _Out_ PHANDLE Key
)
{
return RegistryCreateKey(NULL, &RegistryPath, REG_OPTION_NON_VOLATILE,
Key);
@@ -268,9 +325,9 @@ RegistryCreateServiceKey(
NTSTATUS
RegistryOpenSoftwareKey(
- IN PDEVICE_OBJECT DeviceObject,
- IN ACCESS_MASK DesiredAccess,
- OUT PHANDLE Key
+ _In_ PDEVICE_OBJECT DeviceObject,
+ _In_ ACCESS_MASK DesiredAccess,
+ _Out_ PHANDLE Key
)
{
NTSTATUS status;
@@ -290,15 +347,15 @@ fail1:
NTSTATUS
RegistryOpenHardwareKey(
- IN PDEVICE_OBJECT DeviceObject,
- IN ACCESS_MASK DesiredAccess,
- OUT PHANDLE Key
+ _In_ PDEVICE_OBJECT DeviceObject,
+ _In_ ACCESS_MASK DesiredAccess,
+ _Out_ PHANDLE Key
)
{
HANDLE SubKey;
ULONG Length;
PKEY_NAME_INFORMATION Info;
- PWCHAR Cursor;
+ PWSTR Cursor;
UNICODE_STRING Unicode;
NTSTATUS status;
@@ -315,11 +372,11 @@ RegistryOpenHardwareKey(
NULL,
0,
&Length);
- if (status != STATUS_BUFFER_OVERFLOW &&
+ if (!NT_SUCCESS(status) &&
+ status != STATUS_BUFFER_OVERFLOW &&
status != STATUS_BUFFER_TOO_SMALL)
goto fail2;
-#pragma prefast(suppress:6102)
Info = __RegistryAllocate(Length + sizeof (WCHAR));
status = STATUS_NO_MEMORY;
@@ -340,7 +397,7 @@ RegistryOpenHardwareKey(
ASSERT(Cursor != NULL);
*Cursor = L'\0';
-
+
RtlInitUnicodeString(&Unicode, Info->Name);
status = RegistryOpenKey(NULL, &Unicode, DesiredAccess, Key);
@@ -367,10 +424,10 @@ fail1:
NTSTATUS
RegistryOpenSubKey(
- IN PHANDLE Key,
- IN PCHAR Name,
- IN ACCESS_MASK DesiredAccess,
- OUT PHANDLE SubKey
+ _In_opt_ PHANDLE Key,
+ _In_ PSTR Name,
+ _In_ ACCESS_MASK DesiredAccess,
+ _Out_ PHANDLE SubKey
)
{
ANSI_STRING Ansi;
@@ -400,10 +457,10 @@ fail1:
NTSTATUS
RegistryCreateSubKey(
- IN PHANDLE Key,
- IN PCHAR Name,
- IN ULONG Options,
- OUT PHANDLE SubKey
+ _In_opt_ HANDLE Key,
+ _In_ PSTR Name,
+ _In_ ULONG Options,
+ _Out_ PHANDLE SubKey
)
{
ANSI_STRING Ansi;
@@ -433,8 +490,8 @@ fail1:
NTSTATUS
RegistryDeleteSubKey(
- IN PHANDLE Key,
- IN PCHAR Name
+ _In_ PHANDLE Key,
+ _In_ PSTR Name
)
{
ANSI_STRING Ansi;
@@ -474,9 +531,9 @@ fail1:
NTSTATUS
RegistryEnumerateSubKeys(
- IN HANDLE Key,
- IN NTSTATUS (*Callback)(PVOID, HANDLE, PANSI_STRING),
- IN PVOID Context
+ _In_ HANDLE Key,
+ _In_ NTSTATUS (*Callback)(PVOID, HANDLE, PANSI_STRING),
+ _In_ PVOID Context
)
{
ULONG Size;
@@ -494,7 +551,6 @@ RegistryEnumerateSubKeys(
status != STATUS_BUFFER_TOO_SMALL)
goto fail1;
-#pragma prefast(suppress:6102)
Full = __RegistryAllocate(Size);
status = STATUS_NO_MEMORY;
@@ -545,7 +601,7 @@ RegistryEnumerateSubKeys(
status = RtlUnicodeStringToAnsiString(&Ansi, &Unicode, FALSE);
ASSERT(NT_SUCCESS(status));
- Ansi.Length = (USHORT)(strlen(Ansi.Buffer) * sizeof (CHAR));
+ Ansi.Length = (USHORT)(strlen(Ansi.Buffer) * sizeof (CHAR));
status = Callback(Context, Key, &Ansi);
@@ -570,7 +626,7 @@ fail5:
fail4:
fail3:
__RegistryFree(Full);
-
+
fail2:
fail1:
return status;
@@ -578,9 +634,9 @@ fail1:
NTSTATUS
RegistryEnumerateValues(
- IN HANDLE Key,
- IN NTSTATUS (*Callback)(PVOID, HANDLE, PANSI_STRING,
ULONG),
- IN PVOID Context
+ _In_ HANDLE Key,
+ _In_ NTSTATUS (*Callback)(PVOID, HANDLE, PANSI_STRING,
ULONG),
+ _In_ PVOID Context
)
{
ULONG Size;
@@ -598,7 +654,6 @@ RegistryEnumerateValues(
status != STATUS_BUFFER_TOO_SMALL)
goto fail1;
-#pragma prefast(suppress:6102)
Full = __RegistryAllocate(Size);
status = STATUS_NO_MEMORY;
@@ -642,17 +697,24 @@ RegistryEnumerateValues(
Ansi.MaximumLength = (USHORT)((Basic->NameLength / sizeof (WCHAR)) +
sizeof (CHAR));
Ansi.Buffer = __RegistryAllocate(Ansi.MaximumLength);
+ status = STATUS_NO_MEMORY;
+ if (Ansi.Buffer == NULL)
+ goto fail6;
+
status = RtlUnicodeStringToAnsiString(&Ansi, &Unicode, FALSE);
- ASSERT(NT_SUCCESS(status));
+ if (!NT_SUCCESS(status)) {
+ __RegistryFree(Ansi.Buffer);
+ goto fail7;
+ }
- Ansi.Length = (USHORT)(strlen(Ansi.Buffer) * sizeof (CHAR));
+ Ansi.Length = (USHORT)(strlen(Ansi.Buffer) * sizeof (CHAR));
status = Callback(Context, Key, &Ansi, Basic->Type);
__RegistryFree(Ansi.Buffer);
if (!NT_SUCCESS(status))
- goto fail6;
+ goto fail8;
}
__RegistryFree(Basic);
@@ -661,6 +723,8 @@ RegistryEnumerateValues(
return STATUS_SUCCESS;
+fail8:
+fail7:
fail6:
fail5:
__RegistryFree(Basic);
@@ -668,7 +732,7 @@ fail5:
fail4:
fail3:
__RegistryFree(Full);
-
+
fail2:
fail1:
return status;
@@ -676,8 +740,8 @@ fail1:
NTSTATUS
RegistryDeleteValue(
- IN PHANDLE Key,
- IN PCHAR Name
+ _In_ PHANDLE Key,
+ _In_ PSTR Name
)
{
ANSI_STRING Ansi;
@@ -707,9 +771,9 @@ fail1:
NTSTATUS
RegistryQueryDwordValue(
- IN HANDLE Key,
- IN PCHAR Name,
- OUT PULONG Value
+ _In_ HANDLE Key,
+ _In_ PSTR Name,
+ _Out_ PULONG Value
)
{
ANSI_STRING Ansi;
@@ -723,18 +787,18 @@ RegistryQueryDwordValue(
status = RtlAnsiStringToUnicodeString(&Unicode, &Ansi, TRUE);
if (!NT_SUCCESS(status))
goto fail1;
-
+
status = ZwQueryValueKey(Key,
&Unicode,
KeyValuePartialInformation,
NULL,
0,
&Size);
- if (status != STATUS_BUFFER_OVERFLOW &&
+ if (!NT_SUCCESS(status) &&
+ status != STATUS_BUFFER_OVERFLOW &&
status != STATUS_BUFFER_TOO_SMALL)
goto fail2;
-#pragma prefast(suppress:6102)
Partial = __RegistryAllocate(Size);
status = STATUS_NO_MEMORY;
@@ -755,7 +819,77 @@ RegistryQueryDwordValue(
Partial->DataLength != sizeof (ULONG))
goto fail5;
- *Value = *(PULONG)Partial->Data;
+ *Value = *(PULONG)Partial->Data;
+
+ __RegistryFree(Partial);
+
+ RtlFreeUnicodeString(&Unicode);
+
+ return STATUS_SUCCESS;
+
+fail5:
+fail4:
+ __RegistryFree(Partial);
+
+fail3:
+fail2:
+ RtlFreeUnicodeString(&Unicode);
+
+fail1:
+ return status;
+}
+
+NTSTATUS
+RegistryQueryQwordValue(
+ _In_ HANDLE Key,
+ _In_ PSTR Name,
+ _Out_ PULONGLONG Value
+ )
+{
+ ANSI_STRING Ansi;
+ UNICODE_STRING Unicode;
+ PKEY_VALUE_PARTIAL_INFORMATION Partial;
+ ULONG Size;
+ NTSTATUS status;
+
+ RtlInitAnsiString(&Ansi, Name);
+
+ status = RtlAnsiStringToUnicodeString(&Unicode, &Ansi, TRUE);
+ if (!NT_SUCCESS(status))
+ goto fail1;
+
+ status = ZwQueryValueKey(Key,
+ &Unicode,
+ KeyValuePartialInformation,
+ NULL,
+ 0,
+ &Size);
+ if (!NT_SUCCESS(status) &&
+ status != STATUS_BUFFER_OVERFLOW &&
+ status != STATUS_BUFFER_TOO_SMALL)
+ goto fail2;
+
+ Partial = __RegistryAllocate(Size);
+
+ status = STATUS_NO_MEMORY;
+ if (Partial == NULL)
+ goto fail3;
+
+ status = ZwQueryValueKey(Key,
+ &Unicode,
+ KeyValuePartialInformation,
+ Partial,
+ Size,
+ &Size);
+ if (!NT_SUCCESS(status))
+ goto fail4;
+
+ status = STATUS_INVALID_PARAMETER;
+ if (Partial->Type != REG_QWORD ||
+ Partial->DataLength != sizeof (ULONGLONG))
+ goto fail5;
+
+ *Value = *(PULONGLONG)Partial->Data;
__RegistryFree(Partial);
@@ -777,9 +911,9 @@ fail1:
NTSTATUS
RegistryUpdateDwordValue(
- IN HANDLE Key,
- IN PCHAR Name,
- IN ULONG Value
+ _In_ HANDLE Key,
+ _In_ PSTR Name,
+ _In_ ULONG Value
)
{
ANSI_STRING Ansi;
@@ -792,7 +926,7 @@ RegistryUpdateDwordValue(
status = RtlAnsiStringToUnicodeString(&Unicode, &Ansi, TRUE);
if (!NT_SUCCESS(status))
goto fail1;
-
+
Partial = __RegistryAllocate(FIELD_OFFSET(KEY_VALUE_PARTIAL_INFORMATION,
Data) +
sizeof (ULONG));
@@ -803,7 +937,7 @@ RegistryUpdateDwordValue(
Partial->TitleIndex = 0;
Partial->Type = REG_DWORD;
Partial->DataLength = sizeof (ULONG);
- *(PULONG)Partial->Data = Value;
+ *(PULONG)Partial->Data = Value;
status = ZwSetValueKey(Key,
&Unicode,
@@ -833,7 +967,7 @@ fail1:
static PANSI_STRING
RegistrySzToAnsi(
- IN PWCHAR Buffer
+ _In_ PWSTR Buffer
)
{
PANSI_STRING Ansi;
@@ -872,7 +1006,7 @@ fail1:
static PANSI_STRING
RegistryMultiSzToAnsi(
- IN PWCHAR Buffer
+ _In_ PWSTR Buffer
)
{
PANSI_STRING Ansi;
@@ -934,10 +1068,10 @@ fail1:
NTSTATUS
RegistryQuerySzValue(
- IN HANDLE Key,
- IN PCHAR Name,
- OUT PULONG Type OPTIONAL,
- OUT PANSI_STRING *Array
+ _In_ HANDLE Key,
+ _In_ PSTR Name,
+ _Out_opt_ PULONG Type,
+ _Outptr_ PANSI_STRING *Array
)
{
ANSI_STRING Ansi;
@@ -951,18 +1085,18 @@ RegistryQuerySzValue(
status = RtlAnsiStringToUnicodeString(&Unicode, &Ansi, TRUE);
if (!NT_SUCCESS(status))
goto fail1;
-
+
status = ZwQueryValueKey(Key,
&Unicode,
KeyValuePartialInformation,
NULL,
0,
&Size);
- if (status != STATUS_BUFFER_OVERFLOW &&
+ if (!NT_SUCCESS(status) &&
+ status != STATUS_BUFFER_OVERFLOW &&
status != STATUS_BUFFER_TOO_SMALL)
goto fail2;
-#pragma prefast(suppress:6102)
Value = __RegistryAllocate(Size);
status = STATUS_NO_MEMORY;
@@ -981,12 +1115,12 @@ RegistryQuerySzValue(
switch (Value->Type) {
case REG_SZ:
status = STATUS_NO_MEMORY;
- *Array = RegistrySzToAnsi((PWCHAR)Value->Data);
+ *Array = RegistrySzToAnsi((PWSTR)Value->Data);
break;
case REG_MULTI_SZ:
status = STATUS_NO_MEMORY;
- *Array = RegistryMultiSzToAnsi((PWCHAR)Value->Data);
+ *Array = RegistryMultiSzToAnsi((PWSTR)Value->Data);
break;
default:
@@ -1021,10 +1155,10 @@ fail1:
NTSTATUS
RegistryQueryBinaryValue(
- IN HANDLE Key,
- IN PCHAR Name,
- OUT PVOID *Buffer,
- OUT PULONG Length
+ _In_ HANDLE Key,
+ _In_ PSTR Name,
+ _Outptr_ PVOID *Buffer,
+ _Out_ PULONG Length
)
{
ANSI_STRING Ansi;
@@ -1045,11 +1179,11 @@ RegistryQueryBinaryValue(
NULL,
0,
&Size);
- if (status != STATUS_BUFFER_OVERFLOW &&
+ if (!NT_SUCCESS(status) &&
+ status != STATUS_BUFFER_OVERFLOW &&
status != STATUS_BUFFER_TOO_SMALL)
goto fail2;
-#pragma prefast(suppress:6102)
Partial = __RegistryAllocate(Size);
status = STATUS_NO_MEMORY;
@@ -1106,10 +1240,10 @@ fail1:
NTSTATUS
RegistryUpdateBinaryValue(
- IN HANDLE Key,
- IN PCHAR Name,
- IN PVOID Buffer,
- IN ULONG Length
+ _In_ HANDLE Key,
+ _In_ PSTR Name,
+ _In_ PVOID Buffer,
+ _In_ ULONG Length
)
{
ANSI_STRING Ansi;
@@ -1163,8 +1297,8 @@ fail1:
NTSTATUS
RegistryQueryKeyName(
- IN HANDLE Key,
- OUT PANSI_STRING *Array
+ _In_ HANDLE Key,
+ _Outptr_ PANSI_STRING *Array
)
{
PKEY_NAME_INFORMATION Value;
@@ -1176,12 +1310,12 @@ RegistryQueryKeyName(
NULL,
0,
&Size);
- if (status != STATUS_BUFFER_OVERFLOW &&
+ if (!NT_SUCCESS(status) &&
+ status != STATUS_BUFFER_OVERFLOW &&
status != STATUS_BUFFER_TOO_SMALL)
goto fail1;
// Name information is not intrinsically NULL terminated
-#pragma prefast(suppress:6102)
Value = __RegistryAllocate(Size + sizeof (WCHAR));
status = STATUS_NO_MEMORY;
@@ -1197,7 +1331,7 @@ RegistryQueryKeyName(
goto fail3;
Value->Name[Value->NameLength / sizeof (WCHAR)] = L'\0';
- *Array = RegistrySzToAnsi((PWCHAR)Value->Name);
+ *Array = RegistrySzToAnsi((PWSTR)Value->Name);
status = STATUS_NO_MEMORY;
if (*Array == NULL)
@@ -1218,20 +1352,20 @@ fail1:
NTSTATUS
RegistryQuerySystemStartOption(
- IN PCHAR Prefix,
- OUT PANSI_STRING *Value
+ _In_ PSTR Prefix,
+ _Outptr_ PANSI_STRING *Value
)
{
UNICODE_STRING Unicode;
HANDLE Key;
PANSI_STRING Ansi;
ULONG Length;
- PCHAR Option;
- PCHAR Context;
+ PSTR Option;
+ PSTR Context;
NTSTATUS status;
RtlInitUnicodeString(&Unicode,
L"\\Registry\\Machine\\SYSTEM\\CurrentControlSet\\Control");
-
+
status = RegistryOpenKey(NULL, &Unicode, KEY_READ, &Key);
if (!NT_SUCCESS(status))
goto fail1;
@@ -1401,10 +1535,10 @@ fail1:
NTSTATUS
RegistryUpdateSzValue(
- IN HANDLE Key,
- IN PCHAR Name,
- IN ULONG Type,
- IN PANSI_STRING Array
+ _In_ HANDLE Key,
+ _In_ PSTR Name,
+ _In_ ULONG Type,
+ _In_ PANSI_STRING Array
)
{
ANSI_STRING Ansi;
@@ -1465,7 +1599,7 @@ fail1:
VOID
RegistryFreeSzValue(
- IN PANSI_STRING Array
+ _In_ PANSI_STRING Array
)
{
ULONG Index;
@@ -1481,7 +1615,7 @@ RegistryFreeSzValue(
VOID
RegistryFreeBinaryValue(
- IN PVOID Buffer
+ _In_ PVOID Buffer
)
{
__RegistryFree(Buffer);
@@ -1489,8 +1623,16 @@ RegistryFreeBinaryValue(
VOID
RegistryCloseKey(
- IN HANDLE Key
+ _In_ HANDLE Key
)
{
ZwClose(Key);
}
+
+PUNICODE_STRING
+RegistryGetPath(
+ VOID
+ )
+{
+ return &RegistryPath;
+}
\ No newline at end of file
diff --git a/src/xenvif/registry.h b/src/xenvif/registry.h
index c656806..8fa10b7 100644
--- a/src/xenvif/registry.h
+++ b/src/xenvif/registry.h
@@ -1,32 +1,32 @@
/* Copyright (c) Xen Project.
* Copyright (c) Cloud Software Group, Inc.
* All rights reserved.
- *
- * Redistribution and use in source and binary forms,
- * with or without modification, are permitted provided
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
* that the following conditions are met:
- *
- * * Redistributions of source code must retain the above
- * copyright notice, this list of conditions and the
+ *
+ * * Redistributions of source code must retain the above
+ * copyright notice, this list of conditions and the
* following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the
- * following disclaimer in the documentation and/or other
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the
+ * following disclaimer in the documentation and/or other
* materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
@@ -37,7 +37,7 @@
extern NTSTATUS
RegistryInitialize(
- IN PUNICODE_STRING Path
+ _In_ PUNICODE_STRING Path
);
extern VOID
@@ -45,160 +45,178 @@ RegistryTeardown(
VOID
);
+extern NTSTATUS
+RegistryOpenParametersKey(
+ _In_ ACCESS_MASK DesiredAccess,
+ _Out_ PHANDLE Key
+ );
+
extern NTSTATUS
RegistryOpenKey(
- IN HANDLE Parent,
- IN PUNICODE_STRING Path,
- IN ACCESS_MASK DesiredAccess,
- OUT PHANDLE Key
+ _In_opt_ HANDLE Parent,
+ _In_ PUNICODE_STRING Path,
+ _In_ ACCESS_MASK DesiredAccess,
+ _Out_ PHANDLE Key
);
extern NTSTATUS
RegistryCreateKey(
- IN HANDLE Parent,
- IN PUNICODE_STRING Path,
- IN ULONG Options,
- OUT PHANDLE Key
+ _In_opt_ HANDLE Parent,
+ _In_ PUNICODE_STRING Path,
+ _In_ ULONG Options,
+ _Out_ PHANDLE Key
);
extern NTSTATUS
RegistryOpenServiceKey(
- IN ACCESS_MASK DesiredAccess,
- OUT PHANDLE Key
+ _In_ ACCESS_MASK DesiredAccess,
+ _Out_ PHANDLE Key
);
extern NTSTATUS
RegistryCreateServiceKey(
- OUT PHANDLE Key
+ _Out_ PHANDLE Key
);
extern NTSTATUS
RegistryOpenSoftwareKey(
- IN PDEVICE_OBJECT DeviceObject,
- IN ACCESS_MASK DesiredAccess,
- OUT PHANDLE Key
+ _In_ PDEVICE_OBJECT DeviceObject,
+ _In_ ACCESS_MASK DesiredAccess,
+ _Out_ PHANDLE Key
);
extern NTSTATUS
RegistryOpenHardwareKey(
- IN PDEVICE_OBJECT DeviceObject,
- IN ACCESS_MASK DesiredAccess,
- OUT PHANDLE Key
+ _In_ PDEVICE_OBJECT DeviceObject,
+ _In_ ACCESS_MASK DesiredAccess,
+ _Out_ PHANDLE Key
);
extern NTSTATUS
RegistryOpenSubKey(
- IN HANDLE Key,
- IN PCHAR Name,
- IN ACCESS_MASK DesiredAccess,
- OUT PHANDLE SubKey
+ _In_opt_ HANDLE Key,
+ _In_ PSTR Name,
+ _In_ ACCESS_MASK DesiredAccess,
+ _Out_ PHANDLE SubKey
);
extern NTSTATUS
RegistryCreateSubKey(
- IN HANDLE Key,
- IN PCHAR Name,
- IN ULONG Options,
- OUT PHANDLE SubKey
+ _In_opt_ HANDLE Key,
+ _In_ PSTR Name,
+ _In_ ULONG Options,
+ _Out_ PHANDLE SubKey
);
extern NTSTATUS
RegistryDeleteSubKey(
- IN HANDLE Key,
- IN PCHAR Name
+ _In_ HANDLE Key,
+ _In_ PSTR Name
);
extern NTSTATUS
RegistryEnumerateSubKeys(
- IN HANDLE Key,
- IN NTSTATUS (*Callback)(PVOID, HANDLE, PANSI_STRING),
- IN PVOID Context
+ _In_ HANDLE Key,
+ _In_ NTSTATUS (*Callback)(PVOID, HANDLE, PANSI_STRING),
+ _In_ PVOID Context
);
extern NTSTATUS
RegistryEnumerateValues(
- IN HANDLE Key,
- IN NTSTATUS (*Callback)(PVOID, HANDLE, PANSI_STRING, ULONG),
- IN PVOID Context
+ _In_ HANDLE Key,
+ _In_ NTSTATUS (*Callback)(PVOID, HANDLE, PANSI_STRING, ULONG),
+ _In_ PVOID Context
);
extern NTSTATUS
RegistryDeleteValue(
- IN HANDLE Key,
- IN PCHAR Name
+ _In_ HANDLE Key,
+ _In_ PSTR Name
);
extern NTSTATUS
RegistryQueryDwordValue(
- IN HANDLE Key,
- IN PCHAR Name,
- OUT PULONG Value
+ _In_ HANDLE Key,
+ _In_ PSTR Name,
+ _Out_ PULONG Value
);
-
+
+extern NTSTATUS
+RegistryQueryQwordValue(
+ _In_ HANDLE Key,
+ _In_ PSTR Name,
+ _Out_ PULONGLONG Value
+ );
+
extern NTSTATUS
RegistryUpdateDwordValue(
- IN HANDLE Key,
- IN PCHAR Name,
- IN ULONG Value
+ _In_ HANDLE Key,
+ _In_ PSTR Name,
+ _In_ ULONG Value
);
-
+
extern NTSTATUS
RegistryQuerySzValue(
- IN HANDLE Key,
- IN PCHAR Name,
- OUT PULONG Type OPTIONAL,
- OUT PANSI_STRING *Array
+ _In_ HANDLE Key,
+ _In_ PSTR Name,
+ _Out_opt_ PULONG Type,
+ _Outptr_ PANSI_STRING *Array
);
extern NTSTATUS
RegistryQueryBinaryValue(
- IN HANDLE Key,
- IN PCHAR Name,
- OUT PVOID *Buffer,
- OUT PULONG Length
+ _In_ HANDLE Key,
+ _In_ PSTR Name,
+ _Outptr_ PVOID *Buffer,
+ _Out_ PULONG Length
);
extern NTSTATUS
RegistryUpdateBinaryValue(
- IN HANDLE Key,
- IN PCHAR Name,
- IN PVOID Buffer,
- IN ULONG Length
+ _In_ HANDLE Key,
+ _In_ PSTR Name,
+ _In_ PVOID Buffer,
+ _In_ ULONG Length
);
extern NTSTATUS
RegistryQueryKeyName(
- IN HANDLE Key,
- OUT PANSI_STRING *Array
+ _In_ HANDLE Key,
+ _Outptr_ PANSI_STRING *Array
);
extern NTSTATUS
RegistryQuerySystemStartOption(
- IN PCHAR Name,
- OUT PANSI_STRING *Option
+ _In_ PSTR Name,
+ _Outptr_ PANSI_STRING *Option
);
extern VOID
RegistryFreeSzValue(
- IN PANSI_STRING Array
+ _In_ PANSI_STRING Array
);
extern VOID
RegistryFreeBinaryValue(
- IN PVOID Buffer
+ _In_ PVOID Buffer
);
extern NTSTATUS
RegistryUpdateSzValue(
- IN HANDLE Key,
- IN PCHAR Name,
- IN ULONG Type,
- IN PANSI_STRING Array
+ _In_ HANDLE Key,
+ _In_ PSTR Name,
+ _In_ ULONG Type,
+ _In_ PANSI_STRING Array
);
extern VOID
RegistryCloseKey(
- IN HANDLE Key
+ _In_ HANDLE Key
+ );
+
+extern PUNICODE_STRING
+RegistryGetPath(
+ VOID
);
#endif // _XENVIF_REGISTRY_H
diff --git a/src/xenvif/thread.c b/src/xenvif/thread.c
index dae2214..b510c9e 100644
--- a/src/xenvif/thread.c
+++ b/src/xenvif/thread.c
@@ -50,7 +50,7 @@ struct _XENVIF_THREAD {
static FORCEINLINE PVOID
__ThreadAllocate(
- IN ULONG Length
+ _In_ ULONG Length
)
{
return __AllocatePoolWithTag(NonPagedPool, Length, THREAD_POOL);
@@ -58,7 +58,7 @@ __ThreadAllocate(
static FORCEINLINE VOID
__ThreadFree(
- IN PVOID Buffer
+ _In_ PVOID Buffer
)
{
__FreePoolWithTag(Buffer, THREAD_POOL);
@@ -66,7 +66,7 @@ __ThreadFree(
static FORCEINLINE VOID
__ThreadWake(
- IN PXENVIF_THREAD Thread
+ _In_ PXENVIF_THREAD Thread
)
{
KeSetEvent(&Thread->Event, IO_NO_INCREMENT, FALSE);
@@ -74,7 +74,7 @@ __ThreadWake(
VOID
ThreadWake(
- IN PXENVIF_THREAD Thread
+ _In_ PXENVIF_THREAD Thread
)
{
__ThreadWake(Thread);
@@ -82,7 +82,7 @@ ThreadWake(
static FORCEINLINE VOID
__ThreadAlert(
- IN PXENVIF_THREAD Thread
+ _In_ PXENVIF_THREAD Thread
)
{
Thread->Alerted = TRUE;
@@ -91,7 +91,7 @@ __ThreadAlert(
VOID
ThreadAlert(
- IN PXENVIF_THREAD Thread
+ _In_ PXENVIF_THREAD Thread
)
{
__ThreadAlert(Thread);
@@ -101,11 +101,11 @@ KSTART_ROUTINE ThreadFunction;
VOID
ThreadFunction(
- IN PVOID Argument
+ _In_ PVOID Argument
)
{
- PXENVIF_THREAD Self = Argument;
- NTSTATUS status;
+ PXENVIF_THREAD Self = Argument;
+ NTSTATUS status;
status = Self->Function(Self, Self->Context);
@@ -116,12 +116,12 @@ ThreadFunction(
// NOT REACHED
}
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
NTSTATUS
ThreadCreate(
- IN XENVIF_THREAD_FUNCTION Function,
- IN PVOID Context,
- OUT PXENVIF_THREAD *Thread
+ _In_ XENVIF_THREAD_FUNCTION Function,
+ _In_ PVOID Context,
+ _Outptr_ PXENVIF_THREAD *Thread
)
{
HANDLE Handle;
@@ -131,6 +131,8 @@ ThreadCreate(
(*Thread) = __ThreadAllocate(sizeof (XENVIF_THREAD));
+ Trace("Create thread %p %p\n", Function, Thread);
+
status = STATUS_NO_MEMORY;
if (*Thread == NULL)
goto fail1;
@@ -189,7 +191,7 @@ fail1:
PKEVENT
ThreadGetEvent(
- IN PXENVIF_THREAD Thread
+ _In_ PXENVIF_THREAD Thread
)
{
return &Thread->Event;
@@ -197,7 +199,7 @@ ThreadGetEvent(
BOOLEAN
ThreadIsAlerted(
- IN PXENVIF_THREAD Thread
+ _In_ PXENVIF_THREAD Thread
)
{
return Thread->Alerted;
@@ -205,10 +207,10 @@ ThreadIsAlerted(
VOID
ThreadJoin(
- IN PXENVIF_THREAD Thread
+ _In_ PXENVIF_THREAD Thread
)
{
- LONG References;
+ LONG References;
ASSERT3U(KeGetCurrentIrql(), ==, PASSIVE_LEVEL);
ASSERT3P(KeGetCurrentThread(), !=, Thread->Thread);
diff --git a/src/xenvif/thread.h b/src/xenvif/thread.h
index 1029e2f..5926a6f 100644
--- a/src/xenvif/thread.h
+++ b/src/xenvif/thread.h
@@ -39,37 +39,37 @@ typedef struct _XENVIF_THREAD XENVIF_THREAD,
*PXENVIF_THREAD;
typedef NTSTATUS (*XENVIF_THREAD_FUNCTION)(PXENVIF_THREAD, PVOID);
-__drv_requiresIRQL(PASSIVE_LEVEL)
+_IRQL_requires_(PASSIVE_LEVEL)
extern NTSTATUS
ThreadCreate(
- IN XENVIF_THREAD_FUNCTION Function,
- IN PVOID Context,
- OUT PXENVIF_THREAD *Thread
+ _In_ XENVIF_THREAD_FUNCTION Function,
+ _In_ PVOID Context,
+ _Outptr_ PXENVIF_THREAD *Thread
);
extern PKEVENT
ThreadGetEvent(
- IN PXENVIF_THREAD Self
+ _In_ PXENVIF_THREAD Self
);
extern BOOLEAN
ThreadIsAlerted(
- IN PXENVIF_THREAD Self
+ _In_ PXENVIF_THREAD Self
);
extern VOID
ThreadWake(
- IN PXENVIF_THREAD Thread
+ _In_ PXENVIF_THREAD Thread
);
extern VOID
ThreadAlert(
- IN PXENVIF_THREAD Thread
+ _In_ PXENVIF_THREAD Thread
);
extern VOID
ThreadJoin(
- IN PXENVIF_THREAD Thread
+ _In_ PXENVIF_THREAD Thread
);
#endif // _XENVIF_THREAD_H
diff --git a/src/xenvif/util.h b/src/xenvif/util.h
index b085842..7973be3 100644
--- a/src/xenvif/util.h
+++ b/src/xenvif/util.h
@@ -38,12 +38,12 @@
#include "assert.h"
-#define P2ROUNDUP(_x, _a) \
- (-(-(_x) & -(_a)))
+#define P2ROUNDUP(_t, _x, _a) \
+ (-(-((_t)(_x)) & -(((_t)(_a)))))
static FORCEINLINE LONG
__ffs(
- IN unsigned long long mask
+ _In_ unsigned long long mask
)
{
unsigned char *array = (unsigned char *)&mask;
@@ -82,14 +82,14 @@ __ffs(
static FORCEINLINE VOID
__CpuId(
- IN ULONG Leaf,
- OUT PULONG EAX OPTIONAL,
- OUT PULONG EBX OPTIONAL,
- OUT PULONG ECX OPTIONAL,
- OUT PULONG EDX OPTIONAL
+ _In_ ULONG Leaf,
+ _Out_opt_ PULONG EAX,
+ _Out_opt_ PULONG EBX,
+ _Out_opt_ PULONG ECX,
+ _Out_opt_ PULONG EDX
)
{
- int Value[4] = {0};
+ int Value[4] = {0};
__cpuid(Value, Leaf);
@@ -108,12 +108,12 @@ __CpuId(
static FORCEINLINE LONG
__InterlockedAdd(
- IN LONG *Value,
- IN LONG Delta
+ _Inout_ LONG *Value,
+ _In_ LONG Delta
)
{
- LONG New;
- LONG Old;
+ LONG New;
+ LONG Old;
do {
Old = *Value;
@@ -125,12 +125,12 @@ __InterlockedAdd(
static FORCEINLINE LONG
__InterlockedSubtract(
- IN LONG *Value,
- IN LONG Delta
+ _Inout_ LONG *Value,
+ _In_ LONG Delta
)
{
- LONG New;
- LONG Old;
+ LONG New;
+ LONG Old;
do {
Old = *Value;
@@ -140,23 +140,24 @@ __InterlockedSubtract(
return New;
}
-__checkReturn
+_Check_return_
static FORCEINLINE PVOID
__AllocatePoolWithTag(
- IN POOL_TYPE PoolType,
- IN SIZE_T NumberOfBytes,
- IN ULONG Tag
+ _In_ POOL_TYPE PoolType,
+ _In_ SIZE_T NumberOfBytes,
+ _In_ ULONG Tag
)
{
PUCHAR Buffer;
- __analysis_assume(PoolType == NonPagedPool ||
+ _Analysis_assume_(PoolType == NonPagedPool ||
PoolType == PagedPool);
if (NumberOfBytes == 0)
return NULL;
#if (_MSC_VER >= 1928) // VS 16.9 (EWDK 20344 or later)
+#pragma warning(suppress:28160) // annotation error
Buffer = ExAllocatePoolUninitialized(PoolType, NumberOfBytes, Tag);
#else
#pragma warning(suppress:28160) // annotation error
@@ -171,8 +172,8 @@ __AllocatePoolWithTag(
static FORCEINLINE VOID
__FreePoolWithTag(
- IN PVOID Buffer,
- IN ULONG Tag
+ _In_ PVOID Buffer,
+ _In_ ULONG Tag
)
{
ExFreePoolWithTag(Buffer, Tag);
@@ -180,28 +181,37 @@ __FreePoolWithTag(
static FORCEINLINE PMDL
__AllocatePages(
- IN ULONG Count
+ _In_ ULONG Count,
+ _In_ BOOLEAN Contiguous
)
{
PHYSICAL_ADDRESS LowAddress;
PHYSICAL_ADDRESS HighAddress;
LARGE_INTEGER SkipBytes;
SIZE_T TotalBytes;
+ ULONG Flags;
PMDL Mdl;
PUCHAR MdlMappedSystemVa;
NTSTATUS status;
LowAddress.QuadPart = 0ull;
HighAddress.QuadPart = ~0ull;
- SkipBytes.QuadPart = 0ull;
TotalBytes = (SIZE_T)PAGE_SIZE * Count;
+ if (Contiguous) {
+ SkipBytes.QuadPart = TotalBytes;
+ Flags = MM_ALLOCATE_REQUIRE_CONTIGUOUS_CHUNKS;
+ } else {
+ SkipBytes.QuadPart = 0ull;
+ Flags = MM_ALLOCATE_FULLY_REQUIRED;
+ }
+
Mdl = MmAllocatePagesForMdlEx(LowAddress,
HighAddress,
SkipBytes,
TotalBytes,
MmCached,
- MM_ALLOCATE_FULLY_REQUIRED);
+ Flags);
status = STATUS_NO_MEMORY;
if (Mdl == NULL)
@@ -245,14 +255,14 @@ fail1:
return NULL;
}
-#define __AllocatePage() __AllocatePages(1)
+#define __AllocatePage() __AllocatePages(1, FALSE)
static FORCEINLINE VOID
__FreePages(
- IN PMDL Mdl
+ _In_ PMDL Mdl
)
{
- PUCHAR MdlMappedSystemVa;
+ PUCHAR MdlMappedSystemVa;
ASSERT(Mdl->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA);
MdlMappedSystemVa = Mdl->MappedSystemVa;
@@ -265,15 +275,17 @@ __FreePages(
#define __FreePage(_Mdl) __FreePages(_Mdl)
-static FORCEINLINE PCHAR
+static FORCEINLINE PSTR
__strtok_r(
- IN PCHAR Buffer,
- IN PCHAR Delimiter,
- IN OUT PCHAR *Context
+ _Inout_opt_ PSTR Buffer,
+ _In_ PSTR Delimiter,
+ _When_(Buffer != NULL, _Outptr_)
+ _When_(Buffer == NULL, _Inout_)
+ PSTR *Context
)
{
- PCHAR Token;
- PCHAR End;
+ PSTR Token;
+ PSTR End;
if (Buffer != NULL)
*Context = Buffer;
@@ -303,15 +315,17 @@ __strtok_r(
return Token;
}
-static FORCEINLINE PWCHAR
+static FORCEINLINE PWSTR
__wcstok_r(
- IN PWCHAR Buffer,
- IN PWCHAR Delimiter,
- IN OUT PWCHAR *Context
+ _Inout_opt_ PWSTR Buffer,
+ _In_ PWSTR Delimiter,
+ _When_(Buffer != NULL, _Outptr_)
+ _When_(Buffer == NULL, _Inout_)
+ PWSTR *Context
)
{
- PWCHAR Token;
- PWCHAR End;
+ PWSTR Token;
+ PWSTR End;
if (Buffer != NULL)
*Context = Buffer;
@@ -343,7 +357,7 @@ __wcstok_r(
static FORCEINLINE CHAR
__toupper(
- IN CHAR Character
+ _In_ CHAR Character
)
{
if (Character < 'a' || Character > 'z')
@@ -354,7 +368,7 @@ __toupper(
static FORCEINLINE CHAR
__tolower(
- IN CHAR Character
+ _In_ CHAR Character
)
{
if (Character < 'A' || Character > 'Z')
--
2.55.0.windows.5
--
Césaire Mounah | Vates Windows Guest Tools Engineer
XCP-ng & Xen Orchestra - Vates solutions
web: https://vates.tech
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |