+ Creates a copy of the current device path instance and returns a pointer to the next device path\r
+ instance.\r
+\r
+ This function creates a new device node in a newly allocated buffer of size NodeLength and\r
+ initializes the device path node header with NodeType and NodeSubType. The new device path node\r
+ is returned.\r
+ If NodeLength is smaller than a device path header, then NULL is returned. \r
+ If there is not enough memory to allocate space for the new device path, then NULL is returned. \r
+ The memory is allocated from EFI boot services memory. It is the responsibility of the caller to\r
+ free the memory allocated.\r
+\r
+ @param NodeType The device node type for the new device node.\r
+ @param NodeSubType The device node sub-type for the new device node.\r
+ @param NodeLength The length of the new device node.\r
+\r
+ @return The new device path.\r
+\r
+**/\r
+EFI_DEVICE_PATH_PROTOCOL *\r
+EFIAPI\r
+CreateDeviceNode (\r
+ IN UINT8 NodeType,\r
+ IN UINT8 NodeSubType,\r
+ IN UINT16 NodeLength\r
+ )\r
+{\r
+ EFI_DEVICE_PATH_PROTOCOL *DevicePath;\r
+\r
+ if (NodeLength < sizeof (EFI_DEVICE_PATH_PROTOCOL)) {\r
+ //\r
+ // NodeLength is less than the size of the header.\r
+ //\r
+ return NULL;\r
+ }\r
+ \r
+ DevicePath = AllocatePool (NodeLength);\r
+ if (DevicePath != NULL) {\r
+ DevicePath->Type = NodeType;\r
+ DevicePath->SubType = NodeSubType;\r
+ }\r
+\r
+ return DevicePath;\r
+}\r
+\r
+/**\r
+ Determines if a device path is single or multi-instance.\r
+\r
+ This function returns TRUE if the device path specified by DevicePath is multi-instance.\r
+ Otherwise, FALSE is returned. If DevicePath is NULL, then FALSE is returned.\r