 بسم اللہ الرحمن الرحیم آج ہم موڈیول 47 دیسکا سکریں گے موڈیول 47 ہے لسٹنگ رجسٹری کیز جس طرح پریویس لی ہم نے دیکھا تھا کہ رجسٹری جو ہے وہ ایک طرح کا دیتہ بیس ہے جس کو وندوز use کرتا ہے اس کے اندر کیز ہیں آپ ان کیز بے کو کرییٹ بھی کر سکتے ہیں ان کو ڈلیٹ بھی کر سکتے ہیں ان کے اندر values جو ہے ان کو place بھی کر سکتے ہیں تو مختلف programs مختلف طریقے سے رجسٹری کی اندر انٹریز کو use کرتے ہیں کئی program اس کے اندر انٹریز کر رہے ہیں کئی اس میں سے values جو ہے ان کو use کر رہے ہیں لسٹنگ رجسٹری کیز کے اندر ہم یہ دیکھیں گے کہ ہم کس طرح سے اس کے اندر پڑی بھی کیز کو read کر سکتے ہیں اور ان کے اندر پڑی بھی values کو ہم پھر کیسے get کر سکتے ہیں اور پوری اگر ارحار کی اگر ہم نے رجسٹری کی جو ہے traverse کرنیا اس کو traverse کرنے کا کیا تری کا ہوگا کوئی بھی اگر ایک list ہو یا array ہو programing languages جو ہے وہ دو تکنیکز پروائیٹ کرتی ہیں ایک طریقہ تو یہ ہے کہ array میں سے اگر آپ نے کوئی ایک element access کرنا تو آپ کو اس element کی index پتا ہونی چاہی ہے تو آپ اس میں سے ایک element جو ہے اس just index کو آپ SPECIFI کریں گے اس index کو آپ دارکلی get کر سکتے ہیں کچھ programing languages یہ بھی کر سکتے ہیں کہ items کو index جگہ name سائن کرتی ہیں انڈیکس جو ہوتا ہے وہ بسکلی ایک نام ہوتا ہے تو اس نام کے پھر اس element کو access کیا جا سکتا ہے certain programing languages کے اندر یہ کانسپ بھی exist کرتا ہے جسے کہ php یا visual basic ہوگیرہ کے اندر یہ کانسپٹ associated list کا یا associated arrays کا کانسپٹ جو ہے وہ بھی exist کرتا ہے تو registerی ہے اس کے اندر کچھ ملا جلائی کانسپٹ ہے اس کے اندر دونوں کانسپٹ سے exist کرتا ہے اگر آپ کے پاس ایک sub کی ہے اس سب کی کی آپ کے پاس index ہے تو اس index کے طرف آپ اس سب کی کو get کر سکتے ہیں یا اس سب کی کا جو name ہے اس name کے طرف بھی آپ اس سب کی کو چاہیں تو get کر سکتے ہیں یہاں پہاں آپ کے پاس ایک API اویلیبل ہے with registry reg enum value reg enum value جو ہے یہ ایک API ہے جس کی مدل سے آپ کسی بھی registry انٹری کا value name get کر سکتے ہیں اگر آپ کو اس کی index پتا ہے index آپ کو پتا ہونے چاہیے index آپ سپ پیسٹ فائق کریں گے اور اسے index کے گینسٹ آپ کو value name مل دے گا value name ہو سکتا آپ کو یاد نہ ہو لیکن index تو ہمیشہ 0 سے start ہوتی ہے 0 1 2 3 and so on تو آپ 0 سے start کر کے پھر یہ بھی کر سکتے ہیں کہ پہلی index ہو read کریں پھر اگلی index ہو read کریں پھر اس سے اگلی index ہو read کریں اس کو step wise increment کر کے index کو آپ باری باری ساری انٹریز کو read کر سکتے ہیں تو رگ انہم value جو ہے اس کو آپ index پیسٹ فائق کریں گے اور اسے index پر پڑیوی کی اور اس کا دوسرے attribute جو ہے ان کو آپ get کر سکتے ہیں یہ API اس طریقہ سستمال ہوگی اس کے نظر سب سے پہلے آپ ایک registry انٹری کی جو کی کی کہنڈل ہے وہ سپ پیسٹ فائق کریں گے دوسرا پیرامیٹر جو ہے وہ index ہے تیسرہ پیرامیٹر جو ہے وہ value name ہے یہ value name ایک long pointer کے اندر آپ کو return ہوگا اور اس کے علاوہ آپ یہ بھی دیکھ سکتے ہیں کہ اس کا data lp data جو ہے وہ اس کا data اس کی بھی جو پڑاوہ دیتا ہے وہ بھی آپ اسی function کے تھوڑو retreat کر سکتے ہیں اور اس کی type بھی اور اس کا size بھی count جو ہے وہ بھی آپ کو یہاں پے مل سکتا تو اگر آپ تیپکلی اگر کسی طریقے سے اگر آپ ایک سب کی انٹری کو ڈیڈ کرنا چاہ رہے ہیں تو آپ عام طور پر تیپکلی index 0 سے start کریں گے پہلی جو آپ call کریں گے index 0 کے ساتھ call کریں گے وہاں سے آپ کو value name get ہوگا پھر آپ سب سیکورنڈلی ہر iteration کے اوپر index کو کیا کر سکتے ہیں کہ increase کر سکتے ہیں اور subsequent sub keys کو excess کر سکتے ہیں بالکل exactly یہی کام کرنے کے لیے ہمارے پاس ایک اور apa available ہے reg query value ex فرق صرف اتنا ہے reg query value ex جو ہے یہ index نہیں use کرتی یہ value name use کرتی value name دیں گے اس کے against آپ کو اس کا data یہ آپ کو return کر دے گا جب کے reg enum value جو ہے وہ numeration کا استمال کرتی ہے آپ اس کو index specify کرتے ہیں اس کے against اس کا value name بھی مل جاتا ہے اور آپ کو اس کا data بھی مل جائے گا اگر آپ کو value name نہیں یاد تو آپ simply index کا استمال کر سکتے ہیں using function reg enum value پھر اسی طرح سے اگر آپ کسی ایک key کی value کو set کرنا جاتے ہیں تو اس کے لیے آپ کے فاس function available ہے reg set value ex اس کے اندر وہی آپ کی key کا handle آ جائے گا اس کا value name آ جائے گا جس کو آپ change کرنا چاہتے ہیں اور lp data جو نیا ڈیٹا آپ اس کے تو specify کرنا چاہتے ہیں جس ڈیٹا کے ساتھ آپ اس کو write کرنا چاہتے ہیں تو یہ نئی value جو ہے یہ اس key کے اوپر write ہو جائے گی set ہو جائے گی تو کسی بھی registry entry کی value کو set کرنے کے لیے آپ reg set value ex کو استمال کر سکتے ہیں اگر registry entry کو آپ نے all together ڈیٹ کرنا چاہتے ہیں تو اس کے لیے آپ کے پاس ap available ہے reg delete value اب ایک ہم program دیکھتے ہیں جس کی مدد سے آپ registry entries کو list کر سکتے ہیں یہاں پر ایک دیکھیں ہمارے پاس ایک function available ہے traverse registry previously ہم نے traverse directory کا ایک function بنایا تھا جوکہ recursive تھا اور وہ recursively directory structure ہے اس کو traverse کر سکتا یہ exactly اسی طرح کا recursive function ہے registry کا structure ہے وہ بھی اسی طرح سے hierarchical structure ہے جس طرح سے directory structure ہوتا کے ایک کی ہے اس کے اندر آگے ایک اور کی ہے اس کے اندر آگے ایک اور کی ہے ایک کی کی آگے سب کیز ہیں and so on اور پھر دوسرے یہ سمپل function ہے یہ display پیر اور display سب کی display پیر جو ہے وہ value name اور ڈیٹاکو کا پیر جو ہے اس کو display کرنے کے لیے use ہوگا اور display سب کی جو ہے وہ سب کی کو display کرنے کے لیے use کیا جائے گا یہ just format کرنے کے لیے function ہے جو کہ کسی طرح سے آپ کے ڈیٹاکو جو آپ نے registry messager ڈیٹیو کیا اس کو format کرے گی main function کے اندر دیکھتے ہیں main function کے اندر first ڈیٹاکو یہاں پہلے فلگs نوٹ کر لیں یہ دو فلگs ہیں اور command line parameters ہم یہاں پہلے دیکھتے ہیں کہ command line parameters یہاں پہلے options ڈیٹاکو ہم نے پہلے function بنائے تھا اس کو use کر کے in flags کی values کو set کیا جا رہا فلگ 0 اور فلگ 1 کی value کو set کیا جائے گا تو ہمیں جو parameters ہمیں پتہ چل جائے گا کہ آپ نے اس program کو call کرتے وقت کیا parameters specify کیا تھے کیا options specify کی تھی پھر یہاں پر دیکھیں کہ یہ ہمارے وہی predefined key names ہے اس کو ہم نے strings کے اندر place کر لیا جسنا previous کچھ examples میں بھی کیا تھا اور اس کا ہم نے یہ ایک structure بنا لیا predef keys predefined keys یہ اس لی use ہوگا کہ ہم آگے جا کے اگر user کوئی ایک string دیتا تو ہم دیکھنا چاہیں گے کہ اس نے کنسی keys specify کیا کنسی root کی specify کیا اور اس کے گنس پر ہم نے کنسی predefined key use کرنیا یہ چیک کرنے کے لئے یہ strings use ہوں گی آگے چلتے ہیں اب main کے اندر کیا ہو رہے main کے اندر first Lee جو بھی آپ نے یہاں پر ایک چاہیں تو آپ argument کے اندر پورا ایک root کا پورا ایک کسی بھی کی کا پورا پات specify کر سکتے ہیں کہ پہلی اس کی کی کنسی ہے اس کے آگے کنسی سب کی ہے اس کے آگے کنسی سب کی ہے پورا ایک پات specify کر سکتے ہیں تو یہاں پہ ہم اس پات کو ہی traverse کرنے گے اس کو parse کرنے کی کوشش کر رہے تو یہاں پہ اس نے piece can string کے اندر وہ پورا پات جو ہے اس کو read کر لیا اور read کرنے کے بعد اس نے یہ double slash جہاں یعنی کے back slash یہ چیک کیا کہیں back slash تو نہیں ہے یا null string تو نہیں ہے اور اگر نہیں ہے تو یہ loop چلتا رہے گا اور اس loop کے اندر ہر iteration پہ کیا ہوگا کہ key name کے اندر string جو ہے وہ place character by character place ہوتی جائے گی جب تک کہ اس کو یا تو terminator نہیں مل جاتا یا پھر back slash نہیں مل جاتی تو اس طرح سے آپ نے کی slash کے اندر اندر جو بھی ایک کوئی key defined ہے وہ key آپ نے اس طرح سے بیچ میں سے parse کر لیا اب اس کی کو آپ چیک کریں گے کونسی predefined key کے equilent ہے اور جس کسی predefined key کے equilent ہے اس predefined key کی value جو ہے یہاں پہ آپ h key کے اندر assign کر دیتے ہیں پھر یہ h key جو ہے اس h key کو یہاں پہ آپ نے register open key x کی مدہ سے open کر لیا آپ کے پاس اس کا handle open ہو گیا اب آپ اس کے اوپر مختلف کسم کی operations پر فرم کر سکتے ہیں جس میں سے ایک operation یہ ہے کہ traverse registry یہ آپ نے اپنے اپنے خود سے ایک function منایا ہے اس کو آپ یہ والی key specify کر رہے ہیں اور ایدر یہاں پہ آپ flags specify کر رہے ہیں جو بھی آپ نے parameter کے اندر flags pass کیا تھے اور argument v جو ہے اس کی جو بھی index ہے وہ آپ specify کر رہے ہیں تو traverse registry کیا کرے گا کہ اس key سے onwards registry کو traverse کرنا شروع کر دے گا اب آپ جائیں تو اس کو recursively traverse کریں یا اس کا a کی level traverse کریں اگر آپ نے flags کے اندر recursive option specify کیا تو اس کو recursively traverse کرے گا اگر آپ نے نہیں کی تو وہ just اس کا aیک level scan کرے گا اب traverse registry کا function دیکھتے ہیں اس سے آپ تھوڑا سا واقف ہوں گے بالکل جس طرح traverse directory کا function تھا اسی طرح کی function کی طرح اس function کی اندر آپ سمپلی اس registry انٹری کو open کرتے ہیں open کرنے کے بعد اس کو آپ curie کرتے ہیں اگر آپ کو key name پتا ہے اس کے اس میں آپ کو key name پتا ہے تو آپ اس کو curie کریں گے curie کرنے کے بعد آپ کے پاس ساری چیزیں آجاتی ہیں آپ کے پاس value کی length آجاتی ہے value کا name آجاتا ہے value کا data کا everything آپ کے پاس آجاتی ہے آپ اس کو use کر کے اگر مزید processing کر سکتے ہیں جو آپ نے sizes آپ کو ملے ہیں آپ کے data کے اس sizes کے مطابق آپ memory allocate کرلتے ہیں آپ اس کو value کیلئے کتنی memory allocate کرنے ہیں value name کیلئے کتنی value allocate کرنے ہیں کتنے bytes allocate کرنے ہیں جو جتنے بیٹس ان کو required ہیں جو کہ previous function سے آپ کو مل گئے آپ memory اس کے لئے allocate کرلتے ہیں تا کہ ان کو store کیا جا سکے اب آپ اس کے پر مزید processing start کر سکتے ہیں آپ وہاں سے ایک آپ کے پاس یہ پہلے چل گیا کہ کتنی values ہیں آپ نے ایک loop چلایا تمام values کے لئے starting from index index جو ہے that is initialized by zero تو اس کی کے اندر جتنی بھی سب کیز ہیں ان کو ہم باری باری traverse کریں گے ریگ انم جو ہے وہ ہر index کی value کو اٹھاتا جائے گا اور display کرتا جائے گا display کیا ہم display پیر کی مدر سے اس کو display کرتا جائے گا تو zero سے start کرے گا اور جو اس کو index وہاں سے ملے تھی اس index تک یہ اس کو display کرتا جائے گا ریگ انم اس کی value اٹھائے گا value name مل گیا اس کو value length مل گئی اور یہاں پہ اس name اور type اور ساری جو information ہے اس کو آپ display کر سکتے ہیں پھر اس کے پر ایک اور second pass perform کیا جاتا ہے اسی طرح سے index use کر کے اور اس کس کے اندر again آپ اس کو get کرتے ہیں اور اب اس کس میں آپ سب کی display کریں پورا full کی name سب کی name اور جو last right time وغرہ flags وغرہ یہ تو آپ کا ایک level traverse ہو گیا اب آپ نے مزید اگر اس کے beyond باری باری ہر سب کی کے اندر مزید traverse کرنے کہ ایک سب کی کے اندر دیکھنا ہے اور کسی سب کیز ہیں اور اس کے اندر اور کسی سب کیز ہیں تو آپ کو recursively آگے جانا پڑے گا یہاں پہ آپ کی recursive option جو ہے وہ اگر آپ کی true ہے recursive option کیسے true ہی آپ یہاں پہ سپیسفائے کریں گے اپنے flags کے اندر اور flags 0 کی جو value ہے وہ انڈیکیٹ کرے گی کہ آپ نے recursively چلنے یا نہیں چلنا اگر flags 0 is false تو اس کس میں recursively نہیں چلے گا آپ کا function اگر flags 0 is true اس کس کے اندر آپ کا function آگے recursively چلے گا ان کیس آپ recursively continue کرتے ہیں تو آپ کیا کہ اسی جو بھی سب کی آپ نے traverse کیا اس سب کی کے لیے آپ کیا کہہ رہے ہیں traverse registry کو again call کرتے ہیں تو اس کے اندر جتنے بھی آگے سب کیز ہیں وہ display ہو جائیں گی اور سوان یہ چلتا رہ گا جب تک آپ last level تک نہیں پہن جاتے تو اس طرح سے پورا جو directory کا structure ہے وہ سارے کا سارا structure جو ہے traverse ہوگا انڈ میں جو آپ نے memory allocate کی تھی وہ ساری memory de allocate کرنی last me ہے اور جو آپ نے key open کی بھی ہے اس کو بھی آپ نے close کرنا اس کے لہذا آپ دیکھ سکتے ہیں display pair کا function ہے اس کے اندر just formatting ہو رہی ہے اس کو ہم نے کچھ previously discuss کیا ہے اور display سب کی کا function جو اس کے اندر بھی آپ کی جو values are just format specifiers use کر کے format ہو رہی ہے