diff --git a/secrules/DeviceScan.py b/secrules/DeviceScan.py
new file mode 100644
index 0000000000000000000000000000000000000000..ee448ee1ad9abd2fab1452986b4a4faa681d6843_c2VjcnVsZXMvRGV2aWNlU2Nhbi5weQ==
--- /dev/null
+++ b/secrules/DeviceScan.py
@@ -0,0 +1,51 @@
+from vms import starlet, ssdef
+from vms import dvsdef
+from vms import itemList
+
+
+class DeviceScan(object):
+    def __init__(self, search_devnam=None, devclass=None, devtype=None):
+        self.search_devnam = search_devnam
+        if devclass:
+            self.itmlst = [itemList.itemList(code=dvsdef.DVS__DEVCLASS,
+                                             value=devclass),]
+            if devtype:
+                self.itmlst.append(itemList.itemList(code=dvsdef.DVS__DEVTYPE,
+                                                     value=devtype))
+        elif devtype:
+            self.itmlst = [itemList.itemList(code=dvsdef.DVS__DEVTYPE,
+                                             value=devtype),]
+        else:
+            self.itmlst = None            
+        self.contxt = 0
+
+    def __enter__(self):
+        return self
+
+    def __exit__(self, exc_type, exc_value, traceback):
+        return
+
+    def __iter__(self):
+        return self
+
+    def __next__(self):
+        try:
+            s, devnam, self.contxt = \
+                 starlet.device_scan(self.search_devnam, self.itmlst,
+                                     self.contxt)
+        except VMSError, e:
+            raise StopIteration if e.errno == ssdef.SS__NOMOREDEV else e
+        return devnam
+     
+    def next(self):
+        return self.__next__()
+
+if __name__ == '__main__':
+    import sys
+    from vms.dcdef import DC__DISK
+    with DeviceScan(sys.argv[1]) as idev:
+        for devnam in idev:
+            print devnam
+    print
+    for devnam in DeviceScan(sys.argv[1], devclass=DC__DISK):
+        print devnam