diff --git a/src/test/util_test.cpp b/src/test/util_test.cpp
index a4b796c..807eb20 100644
--- a/src/test/util_test.cpp
+++ b/src/test/util_test.cpp
@@ -1,7 +1,5 @@
 #include "getConfig.hpp"
 
-#include <unistd.h>
-
 #include <boost/container/flat_map.hpp>
 #include <util.hpp>
 
@@ -65,18 +63,23 @@
                  estoraged::BasicVariantType("EmmcDevice"));
     data.emplace(std::string("Name"), estoraged::BasicVariantType("emmc"));
 
-    /* Create a dummy device file. */
-    const std::string testDevName("mmcblk0");
-    std::ofstream testFile;
-    testFile.open(testDevName,
-                  std::ios::out | std::ios::binary | std::ios::trunc);
-    testFile.close();
+    /* Create a dummy device. */
+    std::filesystem::create_directories("abc/device");
+    const std::string dummyTypeFileName("abc/device/type");
+    std::ofstream dummyTypeFile(dummyTypeFileName,
+                                std::ios::out | std::ios::trunc);
+    dummyTypeFile << "SSD";
+    dummyTypeFile.close();
 
-    /* Create another dummy file. */
-    const std::string testDummyFilename("abc");
-    testFile.open(testDummyFilename,
-                  std::ios::out | std::ios::binary | std::ios::trunc);
-    testFile.close();
+    /* Another device. */
+    std::filesystem::create_directories("def/device");
+
+    /* Create a dummy eMMC device. */
+    std::filesystem::create_directories("mmcblk0/device");
+    const std::string typeFileName("mmcblk0/device/type");
+    std::ofstream typeFile(typeFileName, std::ios::out | std::ios::trunc);
+    typeFile << "MMC";
+    typeFile.close();
 
     /* Look for the device file. */
     std::filesystem::path deviceFile, sysfsDir;
@@ -90,8 +93,9 @@
     EXPECT_EQ("luks-mmcblk0", luksName);
 
     /* Delete the dummy files. */
-    EXPECT_EQ(0, unlink(testDevName.c_str()));
-    EXPECT_EQ(0, unlink(testDummyFilename.c_str()));
+    EXPECT_EQ(3, std::filesystem::remove_all("mmcblk0"));
+    EXPECT_EQ(3, std::filesystem::remove_all("abc"));
+    EXPECT_EQ(2, std::filesystem::remove_all("def"));
 }
 
 /* Test case where the "Type" property doesn't exist. */
@@ -102,18 +106,23 @@
     /* Set up the map of properties (with the "Type" property missing). */
     data.emplace(std::string("Name"), estoraged::BasicVariantType("emmc"));
 
-    /* Create a dummy device file. */
-    const std::string testDevName("mmcblk0");
-    std::ofstream testFile;
-    testFile.open(testDevName,
-                  std::ios::out | std::ios::binary | std::ios::trunc);
-    testFile.close();
+    /* Create a dummy device. */
+    std::filesystem::create_directories("abc/device");
+    const std::string dummyTypeFileName("abc/device/type");
+    std::ofstream dummyTypeFile(dummyTypeFileName,
+                                std::ios::out | std::ios::trunc);
+    dummyTypeFile << "SSD";
+    dummyTypeFile.close();
 
-    /* Create another dummy file. */
-    const std::string testDummyFilename("abc");
-    testFile.open(testDummyFilename,
-                  std::ios::out | std::ios::binary | std::ios::trunc);
-    testFile.close();
+    /* Another device. */
+    std::filesystem::create_directories("def/device");
+
+    /* Create a dummy eMMC device. */
+    std::filesystem::create_directories("mmcblk0/device");
+    const std::string typeFileName("mmcblk0/device/type");
+    std::ofstream typeFile(typeFileName, std::ios::out | std::ios::trunc);
+    typeFile << "MMC";
+    typeFile.close();
 
     /* Look for the device file. */
     std::filesystem::path deviceFile, sysfsDir;
@@ -122,8 +131,9 @@
                                              deviceFile, sysfsDir, luksName));
 
     /* Delete the dummy files. */
-    EXPECT_EQ(0, unlink(testDevName.c_str()));
-    EXPECT_EQ(0, unlink(testDummyFilename.c_str()));
+    EXPECT_EQ(3, std::filesystem::remove_all("mmcblk0"));
+    EXPECT_EQ(3, std::filesystem::remove_all("abc"));
+    EXPECT_EQ(2, std::filesystem::remove_all("def"));
 }
 
 /* Test case where the device type is not supported. */
@@ -136,18 +146,23 @@
     data.emplace(std::string("Name"),
                  estoraged::BasicVariantType("some_drive"));
 
-    /* Create a dummy device file. */
-    const std::string testDevName("mmcblk0");
-    std::ofstream testFile;
-    testFile.open(testDevName,
-                  std::ios::out | std::ios::binary | std::ios::trunc);
-    testFile.close();
+    /* Create a dummy device. */
+    std::filesystem::create_directories("abc/device");
+    const std::string dummyTypeFileName("abc/device/type");
+    std::ofstream dummyTypeFile(dummyTypeFileName,
+                                std::ios::out | std::ios::trunc);
+    dummyTypeFile << "SSD";
+    dummyTypeFile.close();
 
-    /* Create another dummy file. */
-    const std::string testDummyFilename("abc");
-    testFile.open(testDummyFilename,
-                  std::ios::out | std::ios::binary | std::ios::trunc);
-    testFile.close();
+    /* Another device. */
+    std::filesystem::create_directories("def/device");
+
+    /* Create a dummy eMMC device. */
+    std::filesystem::create_directories("mmcblk0/device");
+    const std::string typeFileName("mmcblk0/device/type");
+    std::ofstream typeFile(typeFileName, std::ios::out | std::ios::trunc);
+    typeFile << "MMC";
+    typeFile.close();
 
     /* Look for the device file. */
     std::filesystem::path deviceFile, sysfsDir;
@@ -156,8 +171,9 @@
                                              deviceFile, sysfsDir, luksName));
 
     /* Delete the dummy files. */
-    EXPECT_EQ(0, unlink(testDevName.c_str()));
-    EXPECT_EQ(0, unlink(testDummyFilename.c_str()));
+    EXPECT_EQ(3, std::filesystem::remove_all("mmcblk0"));
+    EXPECT_EQ(3, std::filesystem::remove_all("abc"));
+    EXPECT_EQ(2, std::filesystem::remove_all("def"));
 }
 
 /* Test case where we can't find the device file. */
@@ -170,12 +186,16 @@
                  estoraged::BasicVariantType("EmmcDevice"));
     data.emplace(std::string("Name"), estoraged::BasicVariantType("emmc"));
 
-    /* Create a dummy file. */
-    const std::string testDummyFilename("abc");
-    std::ofstream testFile;
-    testFile.open(testDummyFilename,
-                  std::ios::out | std::ios::binary | std::ios::trunc);
-    testFile.close();
+    /* Create a dummy device. */
+    std::filesystem::create_directories("abc/device");
+    const std::string dummyTypeFileName("abc/device/type");
+    std::ofstream dummyTypeFile(dummyTypeFileName,
+                                std::ios::out | std::ios::trunc);
+    dummyTypeFile << "SSD";
+    dummyTypeFile.close();
+
+    /* Another device. */
+    std::filesystem::create_directories("def/device");
 
     /* Look for the device file. */
     std::filesystem::path deviceFile, sysfsDir;
@@ -183,8 +203,9 @@
     EXPECT_FALSE(estoraged::util::findDevice(data, std::filesystem::path("./"),
                                              deviceFile, sysfsDir, luksName));
 
-    /* Delete the dummy file. */
-    EXPECT_EQ(0, unlink(testDummyFilename.c_str()));
+    /* Delete the dummy files. */
+    EXPECT_EQ(3, std::filesystem::remove_all("abc"));
+    EXPECT_EQ(2, std::filesystem::remove_all("def"));
 }
 
 } // namespace estoraged_test
diff --git a/src/util.cpp b/src/util.cpp
index 4b366bb..811cbf8 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -126,17 +126,47 @@
     /* Look for the eMMC in the specified searchDir directory. */
     for (auto const& dirEntry : std::filesystem::directory_iterator{searchDir})
     {
-        std::filesystem::path curDevice(dirEntry.path().filename());
-        if (curDevice.string().starts_with("mmcblk"))
+        /*
+         * We will look at the 'type' file to determine if this is an MMC
+         * device.
+         */
+        std::filesystem::path curPath(dirEntry.path());
+        curPath /= "device/type";
+        if (!std::filesystem::exists(curPath))
         {
-            sysfsDir = dirEntry.path();
-            sysfsDir /= "device";
+            /* The 'type' file doesn't exist. This must not be an eMMC. */
+            continue;
+        }
 
-            deviceFile = "/dev";
-            deviceFile /= curDevice;
+        try
+        {
+            std::ifstream typeFile(curPath, std::ios_base::in);
+            std::string devType;
+            typeFile >> devType;
+            if (devType.compare("MMC") == 0)
+            {
+                /* Found it. Get the sysfs directory and device file. */
+                std::filesystem::path deviceName(dirEntry.path().filename());
 
-            luksName = "luks-" + curDevice.string();
-            return true;
+                sysfsDir = dirEntry.path();
+                sysfsDir /= "device";
+
+                deviceFile = "/dev";
+                deviceFile /= deviceName;
+
+                luksName = "luks-" + deviceName.string();
+                return true;
+            }
+        }
+        catch (...)
+        {
+            lg2::error("Failed to read device type for {PATH}", "PATH", curPath,
+                       "REDFISH_MESSAGE_ID",
+                       std::string("OpenBMC.0.1.FindDeviceFail"));
+            /*
+             * We will still continue searching, though. Maybe this wasn't the
+             * device we were looking for, anyway.
+             */
         }
     }
 
